Python 文档中“mixin 方法”的含义

Jef*_*ery 4 python abstract-class python-3.x

collections.abc 上的 python 文档有一个很好的汇总表(如下图),其中有一列名为“MixinMethods”。我对本专栏与上一篇专栏之间的差异感到困惑。

是否“抽象方法”可以定制,但“混合方法”有一个特定的实现,在给定类型的所有类中都是固定的?如果是这样,我在哪里可以找到这些 mixin 方法中的内容?

在此输入图像描述

多谢!

Tho*_*mas 5

如果您从这些类中的任何一个继承,则您应该自己实现抽象方法。例如:

class MyIter(collections.abc.Iterator):

    # We must override __next__ because it's abstract in `Iterator`.
    def __next__(self):
        ...
Run Code Online (Sandbox Code Playgroud)

mixin是一种方法,其实现已在超类中提供。所以你不需要覆盖__iter__,因为Iterator已经实现了它。

继续这个Iterator例子:Iterator类本身是这样实现的(稍微简化):

class Iterator(Iterable):

    @abc.abstractmethod
    def __next__(self):
        pass

    def __iter__(self):
        return self
Run Code Online (Sandbox Code Playgroud)

我们用它abc.abstractmethod来表示这__next__是抽象的;如果您忘记在具体实现类中重写它,装饰器将导致引发异常

__iter__另一方面,该方法有一个简单地返回的实现self,正如迭代器对象所期望的那样。