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

如何在Python子类中修改父类的共享变量?

解决子类实例共享父类变量的问题

你当前代码的问题在于,shared_variable是实例变量——它在父类的__init__方法里通过self.定义,每个子类实例都会生成自己的独立副本。所以Child1实例修改的只是自己的变量,和Child2实例的变量完全无关。

要实现所有子类实例共享同一个变量的效果,需要把shared_variable改成类变量,直接定义在父类的顶层(不要放在__init__里),这样所有子类实例都会共享这个变量的同一个引用。

修改后的代码如下:

class Parent:
    # 定义为类变量,所有子类实例共享
    shared_variable = "I am a shared variable"

class Child1(Parent):
    def change_variable(self, new_value):
        # 修改类变量,直接通过父类名访问
        Parent.shared_variable = new_value
        # 也可以用 self.__class__.shared_variable = new_value,这种写法更灵活,适配子类重定义类变量的场景

class Child2(Parent):
    # 无需额外的__init__方法,直接继承父类的类变量
    pass

# 测试代码
child1_instance = Child1()
child2_instance = Child2()

print(child1_instance.shared_variable)  # 输出: I am a shared variable

child1_instance.change_variable("New value from Child1")

print(child2_instance.shared_variable)  # 输出: New value from Child1

补充说明

  • 类变量属于整个类,而非单个实例,所有子类实例访问的都是同一个变量对象,修改后所有实例都会看到变化。
  • 注意不要在子类实例里用self.shared_variable = xxx——这样会给当前实例创建一个新的实例变量,覆盖类变量的引用,导致后续访问的是实例自己的变量而非共享的类变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 02:24:56