Python抽象类的__init__方法会被隐式调用吗?
问题解答
这和abc.ABCMeta完全没关系,是Python类继承的默认行为导致的:
- 当子类没有定义自己的
__init__方法时,Python会自动继承父类的__init__并在实例化时调用它,不管父类是不是抽象基类。 - 举个简单的非抽象类例子验证:
你看,这里完全没用到class Parent: def __init__(self): print("Parent __init__ called") class Child(Parent): pass # 没有定义__init__ child = Child() # 输出:Parent __init__ calledabc模块,实例化子类时一样会执行父类的构造方法。
回到你的代码场景:dataset_01只实现了抽象方法_some_method,但没有定义自己的__init__,所以Python会自动调用父类dataset的__init__方法。这是Python继承机制的常规逻辑,和抽象基类的元类abc.ABCMeta无关。
如果想让子类不执行父类的__init__,你必须显式给dataset_01定义自己的__init__方法,哪怕方法体是空的:
class dataset_01(dataset): def __init__(self): pass # 显式定义后,不会自动调用父类__init__ def _some_method(self): # 实现逻辑 pass
内容的提问来源于stack exchange,提问作者Carlo
相关产品推荐
相关产品推荐

