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

Python中是否支持super().__init__().area()这类方法调用方式?

问题解答

1. 关于super().__init__().area()的调用合法性与含义

  • 语法层面这种链式写法是允许的,但完全不符合Python的编码规范,99%的场景下都属于错误写法
  • 具体逻辑:super().__init__()是调用父类的构造方法,Python规定__init__()方法默认返回None,只有主动在__init__里return self(违反规范的操作)时,后续接方法调用才不会报错。你当前的报错是因为父类Square的__init__要求传入side参数,你调用时没有传,所以先抛出了参数缺失的错误。
  • 你想要实现调用父类的area方法,直接写super().area()即可,不需要额外调用__init__,子类实例化的时候已经自动调用过父类的构造方法完成初始化了。

2. __init__与super()的参数规则

  • __init__参数规则:第一个参数固定是当前实例self,不需要手动传入,后续的参数是实例化类时需要传入的自定义参数。如果要手动调用父类的__init__,需要把对应参数完整传入,比如你代码里需要写成super().__init__(side)才是合法调用。
  • super()参数规则:Python3中super()可以不传参数,默认会自动传入当前类和self实例,等价于super(Cube, self);如果是Python2版本则必须显式传入这两个参数。super()返回的是父类的代理对象,直接用这个对象即可调用父类的方法和属性。

修正后的可运行代码

class Square():
    def __init__(self, side):
        self.side = side
    
    def area(self):
        return self.side * self.side

class Cube(Square):
    def area(self):
        # 直接调用父类的平面面积方法乘6,得到立方体表面积
        return super().area() * 6
        
    def volume(self):
        # self.side是实例属性不是方法,不需要加括号
        return super().area() * self.side


c = Square(4)
# 调用Square的area方法,输出16
print(c.area())

d = Cube(4)
# 调用Cube重写后的area方法,输出96
print(d.area())
# 调用volume方法,输出64
print(d.volume())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:12:03