Pra*_*tic 6 python abstract-class python-3.x
在Python标准库文档中,示例实现__subclasshook__是:
class MyIterable(metaclass=ABCMeta):
[...]
@classmethod
def __subclasshook__(cls, C):
if cls is MyIterable:
if any("__iter__" in B.__dict__ for B in C.__mro__):
return True
return NotImplemented
Run Code Online (Sandbox Code Playgroud)
CPython的实现collections.abc确实遵循__subclasshook__它定义的大多数成员函数的这种格式.明确检查cls参数的目的是什么?
__subclasshook__是遗传的。该cls is MyIterable检查确保具体子类MyIterable使用常规issubclass逻辑而不是检查方法__iter__。不然的话,为了一堂课MyConcreteIterable(MyIterable),你就得issubclass(list, MyConcreteIterable)回去了True。
| 归档时间: |
|
| 查看次数: |
429 次 |
| 最近记录: |