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

2024-06-28 20:23:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是pythonspidermonkey,它在内部使用PyMapping_Check来确定对象是否被用作全局(inrt.new_上下文(全局))实现映射协议。(这基本上是一个传递给python spidermonkey的字典,因此javascript对python变量的访问是有限的。)

我在Python中找不到映射协议的官方定义,所以我一直在使用trial-and-error来确定其中的内容。有官方推荐信吗?在


Tags: and对象协议new字典官方定义check
1条回答
网友
1楼 · 发布于 2024-06-28 20:23:35

^{}模块为MappingSequence等定义接口。在

通过从该模块中的抽象基类继承,可以获得某些方法的默认实现。因此,要被视为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,类的接口应该如下所示:

^{pr2}$

MutableMapping继承可以获得Mapping所有方法的“自由”定义,另外:

  • pop
  • popitem
  • clear
  • update
  • setdefault

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

相关问题 更多 >