Jef*_*ery 4 python abstract-class python-3.x
collections.abc 上的 python 文档有一个很好的汇总表(如下图),其中有一列名为“MixinMethods”。我对本专栏与上一篇专栏之间的差异感到困惑。
是否“抽象方法”可以定制,但“混合方法”有一个特定的实现,在给定类型的所有类中都是固定的?如果是这样,我在哪里可以找到这些 mixin 方法中的内容?
多谢!
如果您从这些类中的任何一个继承,则您应该自己实现抽象方法。例如:
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,正如迭代器对象所期望的那样。
| 归档时间: |
|
| 查看次数: |
524 次 |
| 最近记录: |