Python继承问题:子类修改父类类属性后,如何让父类方法调用该属性
解决Python子类调用父类方法时默认参数使用子类类属性的问题
问题核心在于:Python函数的默认参数是在定义阶段绑定值的。父类Parent的family_number方法定义时,kids=Kids会直接绑定当时的Parent.Kids=2,子类Child重写Kids后,默认参数不会自动更新为子类的值。
要实现需求,只需修改父类方法,将默认参数设为None,在方法内部动态获取当前实例所属类的Kids属性,无需重写方法或修改属性类型:
class Parent: Kids = 2 def family_number(self, kids=None): # 若未传入参数,动态获取当前类的Kids属性 if kids is None: kids = self.__class__.Kids return kids + 2 class Child(Parent): Kids = 3
测试验证:
# 父类实例调用 parent_instance = Parent() print(parent_instance.family_number()) # 输出 4(2+2) # 子类实例调用 child_instance = Child() print(child_instance.family_number()) # 输出 5(3+2) # 传入自定义参数时正常工作 print(child_instance.family_number(5)) # 输出 7(5+2)
这种方式的优势:
- 无需在子类中重写
family_number方法,减少代码冗余 - 保持
Kids为类属性,符合需求 - 动态获取类属性,后续若有其他子类重写
Kids,也能自动适配
内容的提问来源于stack exchange,提问作者Sikafica
相关产品推荐
相关产品推荐

