`issubclass`通常如何判断一个类是另一个类的子类?

问题描述 投票:0回答:1

issubclass(cls, base_cls)
如何运作?

检查

base_cls
是否在
cls.__mro__
中?还是有其他的或更复杂的事情?

issubclass(cls, base_cls)
base_cls.__subclasscheck__(self, cls)
实现,并且可以具有与默认行为完全不同的行为。由于
__subclasscheck__
也是一个内置方法,我也可以改写我的问题:

默认情况下

__subclasscheck__()
方法是如何工作的?

python inheritance
1个回答
0
投票

对于 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

© www.soinside.com 2019 - 2024. All rights reserved.