如何判断Python中的派生类是否定义了自身的__init__方法?
如何区分派生类的
__init__是自身定义还是继承而来? 当然有办法区分!下面给你分享几种简单实用的方法:
方法1:检查类的__dict__字典
每个Python类的__dict__属性只会存储自身定义的属性和方法,继承来的成员不会出现在这里。所以直接判断__init__是否在类的__dict__里就能快速区分:
class A: def __init__(self): pass class B(A): pass class C(A): def __init__(self): pass # 检查__init__是否是类自身定义的 print('__init__' in B.__dict__) # 输出 False,B的__init__是继承自A print('__init__' in C.__dict__) # 输出 True,C自己定义了__init__
方法2:利用方法的__owner__属性(Python 3.3+)
对于类方法和实例方法,Python 3.3及以上版本提供了__owner__属性,它会指向该方法最初所属的类。通过对比这个属性和当前类,就能明确判断方法是否是自身定义的:
print(B.__init__.__owner__ is B) # 输出 False,__init__的归属类是A print(C.__init__.__owner__ is C) # 输出 True,__init__的归属类是C自己
补充说明
如果子类重写了__init__但在方法内部调用了super().__init__(),这依然属于子类自身定义的方法——因为方法本身是子类声明的,只是逻辑上复用了父类的实现,上面的两种方法依然能正确识别这种情况。
内容的提问来源于stack exchange,提问作者csehydrogen
相关产品推荐
相关产品推荐

