我正在查看非常好的集合库和更具体的抽象基类 (ABC)。一个我无法理解的:MappingView。

  • 它有什么用?与 Sized 相比,它的优势是什么?也许是一个例子?
  • 文档说它的基类是 Sized,但另一方面有一个 len 混合......那么我们是否必须实现 len ,或者不?

  • 有关文档,请参阅 collections

    最佳答案

    MappingView 本质上是用户定义 View 的基类。它通过提供 Sized 属性来实现 __len__ 接口(interface),该属性是其 _mapping 成员的长度,所以如果这个实现对你来说很好,你不需要实现自己的 __len__
    它包含 KeysViewItemsViewValuesView 的通用代码。这些最后的类可以在需要像 my_dict.keys()my_dict.items()my_dict.values() 这样的 View 的任何地方使用。如果您创建一种新的用户定义类型的数据,并且想要创建一个既不能与 keysvaluesitems 相比的 View ,那么您可以直接继承 MappingView 并以不同的方式实现 __contains____iter__ 函数。

    关于Python collections.MappingView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20052294/

    10-12 17:23