Python类继承如何复用父类Props的默认参数值避免参数缺失报错
问题根因
- 所有子类的
__init__方法中,anchor、layer、linetype_scale三个公共参数未设置默认值,要求实例化时必须传入,因此触发缺少位置参数的报错 - 父类
Props存在笔误:self.layer = layer,末尾多了逗号,会导致layer属性被错误赋值为单元素元组,而非预期的数值类型
最优解决方案(支持后续扩展)
推荐用**kwargs接收公共参数,后续父类新增通用属性时不需要修改任何子类的定义,完全匹配你后续新增同类类的需求:
class Props(): def __init__(self, anchor="CC", layer=0, linetype_scale=1): self.anchor = anchor self.layer = layer # 移除了多余的逗号 self.linetype_scale = linetype_scale class Rectangle(Props): def __init__(self, x, y, width, height, **kwargs): super().__init__(**kwargs) self.x = x self.y = y self.width = width self.height = height class Square(Props): def __init__(self, x, y, width, **kwargs): super().__init__(**kwargs) self.x = x self.y = y self.width = width class Circle(Props): # 可选修正:原参数diametar拼写错误,正确为diameter def __init__(self, x, y, diameter, **kwargs): super().__init__(**kwargs) self.x = x self.y = y self.diameter = diameter
调用验证
你需要的两种调用方式都可以正常运行:
# 不传公共参数,自动使用父类默认值 rect = Rectangle(10, 10, 20, 50) # 按需指定公共参数,覆盖默认值 rect2 = Rectangle(10, 10, 20, 50, linetype_scale=5, anchor="TL", layer=2)
如果不想用**kwargs,也可以直接在子类的参数列表里给三个公共参数添加和父类一致的默认值即可,但是后续父类新增通用属性时需要同步修改所有子类的参数列表,扩展性较差。
内容的提问来源于stack exchange,提问作者Klak031
相关产品推荐
相关产品推荐

