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

Python继承中父类与子类能否为同一类?代码疑问解析

Python里这段super()代码到底是啥意思?

你说的“类自继承”其实是个误解,这段代码里的MyParentClass根本没继承自己,而是在构造方法里用super()调用了它的隐式父类的构造方法。

具体说清楚

  • 在Python 3里,所有没显式指定父类的类,默认都会继承object这个顶级基类;Python 2里这种定义方式属于“经典类”,没有默认父类。
  • 代码里的super(MyParentClass, self).__init__(),作用是调用当前类直接父类的__init__方法:
    • 要是在Python 3环境下,这句其实等价于object.__init__(self),但object的构造方法本身啥也不干,所以执行了也没实际效果。
    • 要是在Python 2环境下,这种经典类使用super()会直接报错,因为经典类不支持这个语法。

为啥有人写这种看起来没用的代码?

  • 主要是为了方便以后扩展:比如哪天这个类要继承别的类了,改成class MyParentClass(SomeOtherClass):,这句super()不用修改就能自动调用新父类的构造方法,不用手动改成SomeOtherClass.__init__(self)。
  • 也可能是开发者的习惯,或者从别的有继承逻辑的类里复制代码过来没做修改。

举两个对比例子更明白

无显式继承的情况(Python 3)

class MyParentClass():
    def __init__(self):
        super(MyParentClass, self).__init__()
        print("MyParentClass构造方法执行")

obj = MyParentClass()
# 输出: MyParentClass构造方法执行
# super调用的object.__init__没输出,因为它啥也不做

改成显式继承其他类的情况

class BaseClass():
    def __init__(self):
        print("BaseClass构造方法执行")

class MyParentClass(BaseClass):
    def __init__(self):
        super(MyParentClass, self).__init__()
        print("MyParentClass构造方法执行")

obj = MyParentClass()
# 输出:
# BaseClass构造方法执行
# MyParentClass构造方法执行

这时候就能看到super()的作用了,它自动调用了新父类BaseClass的构造方法。


内容的提问来源于stack exchange,提问作者Lakpa Tamang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:35:30