当前位置: 首页 > 面试题库 >

如何在Python中正确实现映射协议?

童宏富
2023-03-14
问题内容

我正在使用python-spidermonkey,它在内部使用PyMapping_Check来识别用作全局对象(在rt.new_context(global)中)是否实现了映射协议。(这基本上是传递给python-
spidermonkey的字典,因此javascript对python变量的访问受到限制。)

我无法在Python中找到映射协议的正式定义,因此我一直在尝试和尝试确定其中的内容。有官方参考吗?


问题答案:

collections.abc模块定义了象接口MappingSequence等。

通过从该模块中的抽象基类继承,您可以获得某些方法的默认实现。因此,要被视为a Mapping,您的类定义应如下所示:

class MyMapping(collections.abc.Mapping):
    def __getitem__(self, item)
    def __iter__(self)
    def __len__(self)

继承自Mapping会为您提供大部分dict有用方法的“免费”实现:

  • __contains__
  • keys
  • items
  • values
  • get
  • __eq__
  • __ne__

如果这些默认方法实现对自定义数据结构的效率不高,则始终可以使用自己的版本覆盖它们。

被认为是MutableMapping,您的类的界面应如下所示:

class MyMutableMapping(collections.abc.MutableMapping):
    def __getitem__(self, key)
    def __setitem__(self, key, item)
    def __delitem__(self, key)
    def __iter__(self)
    def __len__(self)

继承自MutableMapping会为您免费提供所有Mapping方法的定义,以及:

  • pop
  • popitem
  • clear
  • update
  • setdefault

如果您要从头开始“滚动自己的脚本”,并且不想使用抽象基类,那么如果希望您的类可以严格地用Liskov替代,则应该尝试定义 所有 上述方法dict



 类似资料:
  • 仅供参考:我已经删除了所有apache默认的webapp文件,并启动了我自己的项目,因此可以使用访问它,这很好。 我在驱动器中的servlet位置: 我在eclipse IDE中的包:eclipse IDE映像中的包 和我的web.xml文件: 我的HTML表单: 感谢所有的回复:)

  • 我有以下POJO,可以序列化为字节或。 当试图反序列化正文时,该错误似乎是从请求类生成的: 我怎样才能正确地反序列化地图?

  • 我有麻烦映射一个嵌套dto字段正确与MapStruct。我有几个DTO: 具有相应的映射器 到目前为止,一切工作都很好,生成的代码自动连接其他需要的映射器来正确地构建DTO。例如生成的仪器映射器实现 现在,当我试图创建一个包含嵌套工具dto的映射器时遇到了麻烦。映射器应使用instrumentMapper正确创建所需的dto。DTO: 映射器: 生成的代码: 现在media mapper得到了很好

  • 我正在寻找关于如何以及何时实现dispose模式的建议。 我已经阅读了MSDN关于如何实现dispose()模式的文章。说得通。我在我的类中实现了它,但它似乎对内存使用没有什么影响。 有点背景,我正在建立一个2D自顶向下的游戏引擎。我有一个名为Gatherer的单元,它继承自Actor(一个用于绘制sprite和跟踪viewplane的基本类),它们是一些简单的sprite。它们在5轮比赛后消失。

  • 问题内容: 我目前正在滚动自己的小ORM,发现自己面临创建规范化映射的任务,以防止从数据库中多次加载同一实体。 我目前的方法是使用。该键是映射数据库实体的主键(如果是复合键,则为),其值为。 我的主要问题是如何清理地图?当不再使用某个对象时,映射中的弱引用将消失,而我只会在下一次查找时发现它(或者,如果我不再查找该对象,则永远不会)。当弱引用被清除时,我可以将它们注册为a ,然后在每次查找时检查该

  • 问题内容: 我正在尝试设置控制器,但是很遗憾无法查看输出…一切都正确呈现。当我转到404页面时。从Netbeans运行我的应用程序转到 app-config.xml web.xml 我如何调试它,看看有什么用,什么没用? 更新资料 Netbeans中的GlassFish服务器日志显示 问题答案: 您的名字映射到中吗?从您先前的问题中,我看到: 网址不匹配格式。尝试一种可能的解决方法。