如何在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
相关产品推荐
相关产品推荐

