You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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__ called
    
    你看,这里完全没用到abc模块,实例化子类时一样会执行父类的构造方法。

回到你的代码场景: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 06:32:02