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

为什么Square类的super().__init__()方法要传入两次length参数?

核心原因可以从两个层面理解:

  1. 父类构造方法的参数强制要求
    你写的super().__init__本质是调用父类Rectangle的构造方法,看父类的__init__定义就知道,它要求传入length和width两个位置参数,少传任何一个都会直接触发参数不匹配的报错。
  2. 正方形的属性特性适配
    正方形的核心特点就是长和宽完全相等,所以Square类的构造方法只需要接收一个length参数就够了,给父类传参时把长和宽都赋值为这个length,刚好符合正方形的属性定义,后续调用从父类继承来的area()、perimeter()方法也能直接得到正确结果,不需要再单独重写这两个方法,最大化复用了父类的代码。

你可以试下修改代码做验证:

# 正常传两个参数的运行效果
s = Square(5)
print(s.area()) # 输出25,符合正方形5*5的面积计算逻辑
print(s.perimeter()) # 输出20,符合正方形2*5+2*5的周长计算逻辑

# 如果只传一个参数,运行直接报错
# 错误写法:super().__init__(length)
# 报错信息:TypeError: Rectangle.__init__() missing 1 required positional argument: 'width'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 03:12:03