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

Python中如何在子类中基于父类属性重写同名属性

Python中如何在子类中基于父类属性重写同名属性

嘿,这个问题我碰到过好多次啦,咱们来捋清楚怎么解决~

你原来的代码之所以报错,是因为在定义类属性的时候,self还不存在——self是类实例化之后才会有的对象引用,所以直接在类属性里用self肯定行不通。下面给你几种靠谱的解决方法:

方法一:直接引用父类的类属性

因为父类的attribute是类属性,你可以直接通过父类名称来访问它,然后计算子类的属性值:

class Parent:
    attribute = 5

class Child(Parent):
    attribute = Parent.attribute / 2

这样子类的Child.attribute就会被设为父类属性的一半,也就是2.5,完美解决问题~

方法二:用super()来访问父类属性(更灵活)

如果你担心以后修改父类名称,或者想让代码更健壮,可以用super()来指向父类:

class Parent:
    attribute = 5

class Child(Parent):
    attribute = super().attribute / 2

Python 3里支持在类定义中直接使用super(),它会自动找到当前类的父类,这样就算以后父类改名了,子类的代码也不用跟着改,非常方便。

方法三:如果是实例属性的情况

要是你其实想让attribute是每个实例独有的属性(而不是类属性),那就要在__init__方法里处理:

class Parent:
    def __init__(self):
        self.attribute = 5

class Child(Parent):
    def __init__(self):
        super().__init__()  # 先调用父类的初始化方法,给实例设置attribute
        self.attribute = self.attribute / 2

这种方式会先让父类完成实例属性的初始化,再把子类实例的attribute改成父类值的一半,每个实例都会有自己的属性值。

备注:内容来源于stack exchange,提问作者Preetam Pal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 09:33:00