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

Python子类继承父类设置参数默认值报错的解决方法

报错原因分析
  • 第一类报错non-default argument follows default argument触发原因:Python语法要求函数/方法定义中,带默认值的参数必须放在所有无默认值参数的后面。你之前尝试给no_of_sides设置默认值4时,大概率是把该参数放在了side_length的前面,导致无默认值的side_length跟在带默认值的no_of_sides之后,触发语法校验错误。
  • 第二类TypeError报错触发原因:你当前版本的Square类__init__方法要求传入2个位置参数no_of_sides、side_length,但实例化Square(5)时仅传入了1个参数,该参数会被分配给第一个形参no_of_sides,第二个形参side_length没有收到传值,因此报错。且当前写法存在逻辑冗余:先把自定义的no_of_sides传给父类初始化,随后又强行覆写为4,相当于父类初始化时传入的no_of_sides完全无效。
修复方案

正方形的边数固定为4,不需要开放为可传入参数,直接在子类初始化时固定给父类传值4即可,修改后的完整代码如下:

class RegularPolygon:
    def __init__(self, no_of_sides, side_length):
        self.no_of_sides = no_of_sides
        self.side_length = side_length
    def perimeter(self):
        keliling_poligon = self.no_of_sides * self.side_length
        return keliling_poligon
    def interior_angle(self):
        int_angle = (self.no_of_sides - 2) * 180/self.no_of_sides
        return int_angle
    def exterior_angle(self):
        ext_angle=360/self.no_of_sides
        return ext_angle
    
class Square(RegularPolygon):
    # 仅保留边长作为入参即可
    def __init__(self, side_length):
        # 固定边数4传给父类初始化
        super().__init__(no_of_sides=4, side_length=side_length)
    def area(self):
        area_square = self.side_length**2
        return area_square
    def diagonal(self):
        diagonal_square = self.side_length*(2**0.5)
        return diagonal_square

square_1 = Square(5)

s_perim = square_1.perimeter()
s_area = square_1.area()
angl_int = square_1.interior_angle()
angl_ext = square_1.exterior_angle()
diagonal = square_1.diagonal()

result = (s_perim, s_area, angl_int, angl_ext, diagonal)
print(result)
运行结果

代码运行后输出如下:

(20, 25, 90.0, 90.0, 7.071067811865476)

如果确实有需要保留no_of_sides自定义能力的特殊场景,只需要调整参数顺序,把带默认值的参数放在最后即可,写法如下:

def __init__(self, side_length, no_of_sides=4):
    super().__init__(no_of_sides, side_length)

该写法既不会触发语法报错,也支持仅传入边长实例化对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:45:05