In the Python 标准库文档 https://docs.python.org/3/library/abc.html#abc.ABCMeta.__subclasshook__,示例实现__subclasshook__
is:
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
CPython 的实现collections.abc
大多数情况下确实遵循这种格式__subclasshook__
它定义的成员函数。
明确检查的目的是什么cls
争论?
__subclasshook__
是遗传的。这cls is MyIterable
检查确保具体子类MyIterable
使用常规的issubclass
逻辑而不是检查__iter__
方法。否则,对于一个类MyConcreteIterable(MyIterable)
, 你将会拥有issubclass(list, MyConcreteIterable)
返回True
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)