【问题标题】:Understanding MappingView ABC [duplicate]了解 MappingView ABC [重复]
【发布时间】:2016-12-23 13:25:48
【问题描述】:

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

我可能完全误解了 ABC 和 docs,但 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

【问题讨论】:

    标签: python python-3.x abc


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-01-20
      • 1970-01-01
      • 2021-01-09
      • 1970-01-01
      • 1970-01-01
      • 2013-08-29
      • 2018-08-19
      • 2017-11-19
      • 1970-01-01
      相关资源
      最近更新 更多