摘要 class 容器 - Python

Abstract class Container - Python

我试图理解为什么任何具有 __contains__ 方法的 class 成为容器抽象 class 的实例。我有点困惑,因为正确的方法应该是这样 class dumb(Container): 并定义你自己的 __contains__ 方法。

应该是因为鸭子打字但是鸭子打字在哪里?

类 能够通过实施 __subclasshook__ 自定义 isinstance 检查。 许多 类 会选择查看实例的属性来确定类型,而不是依赖继承层次结构

例如,this is how Container is implemented

class Container(metaclass=ABCMeta):

    __slots__ = ()

    @abstractmethod
    def __contains__(self, x):
        return False

    @classmethod
    def __subclasshook__(cls, C):
        if cls is Container:
            return _check_methods(C, "__contains__")
        return NotImplemented

    __class_getitem__ = classmethod(GenericAlias) ```

如果它走路像鸭子,叫起来像鸭子,那它一定是鸭子

鸭子类型是指在某些情况下,对象可以通过其功能而不是其 class 名称来定义。通过包含 __contains__ 方法,意味着该对象充当容器。