issubclass(cls, base_cls)
如何运作?
检查
base_cls
是否在cls.__mro__
中?还是有其他的或更复杂的事情?
issubclass(cls, base_cls)
由 base_cls.__subclasscheck__(self, cls)
实现,并且可以具有与默认行为完全不同的行为。由于 __subclasscheck__
也是一个内置方法,我也可以改写我的问题:
默认情况下
__subclasscheck__()
方法是如何工作的?
对于 cpython,处理
issubclass
的大部分代码都可以在 abstract.c
和 typeobject.c
中找到。
要关注的功能是
object_issubclass
,可在abstract.c
中找到。 object_issubclass
函数中有一行处理 __subclasscheck__
功能:
checker = _PyObject_LookupSpecial(cls, &_Py_ID(__subclasscheck__));
如果
base_cls.__subclasscheck__
存在,则 checker
不会是 NULL
,代码将调用它,然后将返回值转换为 True
或 False
。