2

MappingView 容器和 Sized 容器有什么区别?有关如何实现 MappingView 容器的任何示例?

我可能完全误解了 ABC 和文档,但 MappingView 容器是任何继承自 Sized 的容器,对吗?如果是这样,那为什么我的虚拟示例不起作用?

import collections

class MySized:
    def __len__():
        pass

class MyMappingView(MySized):
    pass

print(issubclass(MySized, collections.Sized)) # True
print(issubclass(MyMappingView, collections.MappingView)) # False
4

1 回答 1

1

因为你没有继承它(实际上或其他方式)。MappingView用作keys/items/values视图的基类。Sized用于获取其大小 ( len) 有意义的任何对象。

这些ABCs 用于检查 Python 中的某些对象是否遵循它们定义的接口。MappingView您可以只创建register符合它的任何新类,而不是创建自定义。

可以说,您不会register使用一个类,MappingView因为它仅用作提供默认值__len____repr__视图的__init__基类。Keys/Values/Items如果您定义了返回自定义视图的新映射类型,只需将这些视图注册到适当的Keys/Values/Items视图。

于 2016-12-23T13:56:48.167 回答