2024-06-28 20:23:35 发布
网友
我使用的是pythonspidermonkey,它在内部使用PyMapping_Check来确定对象是否被用作全局(inrt.new_上下文(全局))实现映射协议。(这基本上是一个传递给python spidermonkey的字典,因此javascript对python变量的访问是有限的。)
我在Python中找不到映射协议的官方定义,所以我一直在使用trial-and-error来确定其中的内容。有官方推荐信吗?在
^{}模块为Mapping、Sequence等定义接口。在
Mapping
Sequence
通过从该模块中的抽象基类继承,可以获得某些方法的默认实现。因此,要被视为Mapping,您的类定义应该如下所示:
class MyMapping(collections.abc.Mapping): def __getitem__(self, item) def __iter__(self) def __len__(self)
从Mapping继承将获得dict大多数有用方法的“免费”实现:
dict
__contains__
keys
items
values
get
__eq__
__ne__
如果这些默认方法实现在自定义数据结构方面效率低下,则始终可以使用自己的版本覆盖它们。在
要被视为MutableMapping,类的接口应该如下所示:
MutableMapping
从MutableMapping继承可以获得Mapping所有方法的“自由”定义,另外:
pop
popitem
clear
update
setdefault
如果您是从头开始“滚动自己的”并且不想使用抽象基类,那么您可能应该尝试定义上面所有方法的所有,如果您希望您的类严格地用Liskov代替dict。在
^{} 模块为
Mapping
、Sequence
等定义接口。在通过从该模块中的抽象基类继承,可以获得某些方法的默认实现。因此,要被视为
Mapping
,您的类定义应该如下所示:从
Mapping
继承将获得dict
大多数有用方法的“免费”实现:__contains__
keys
items
values
get
__eq__
__ne__
如果这些默认方法实现在自定义数据结构方面效率低下,则始终可以使用自己的版本覆盖它们。在
要被视为
^{pr2}$MutableMapping
,类的接口应该如下所示:从
MutableMapping
继承可以获得Mapping
所有方法的“自由”定义,另外:pop
popitem
clear
update
setdefault
如果您是从头开始“滚动自己的”并且不想使用抽象基类,那么您可能应该尝试定义上面所有方法的所有,如果您希望您的类严格地用Liskov代替
dict
。在相关问题 更多 >
编程相关推荐