Python子类修改继承的父类属性如何同步到其他同父类子类
问题解决思路
根因说明
当前代码中number是Main类的实例属性,每次实例化Sub1、Sub2对象时,都会生成独立的number副本,不同实例的属性修改互不影响,所以sub1修改属性后sub2读取的还是自己的初始值10。
方案1:使用类属性实现全局共享
如果需要所有Main的子类实例都共享同一个number值,直接将number定义为父类的类属性即可,修改时直接操作父类属性,不要操作实例自身属性:
class Main: # 定义为类属性,所有实例共享 number = 10 class Sub1(Main): def addnum(self): # 修改父类的类属性,所有共享该属性的实例都会同步生效 Main.number += 1 print(Main.number) class Sub2(Main): def func(self): print(Main.number) sub2 = Sub2() sub1 = Sub1() sub1.addnum() sub2.func()
运行后sub1.addnum()输出11,sub2.func()也会输出11。
方案2:使用独立状态对象实现可控共享
如果不需要全局所有实例共享,只需要指定的部分实例共享属性,可以抽离独立的状态类,将同一个状态实例传入需要同步的子类对象:
# 独立状态类,存储需要共享的属性 class SharedState: def __init__(self): self.number = 10 class Main: # 初始化时传入共享状态实例 def __init__(self, state): self.state = state class Sub1(Main): def addnum(self): self.state.number += 1 print(self.state.number) class Sub2(Main): def func(self): print(self.state.number) # 创建统一的共享状态 state = SharedState() # 两个实例传入同一个状态对象,实现属性同步 sub2 = Sub2(state) sub1 = Sub1(state) sub1.addnum() sub2.func()
这种方案更灵活,可以创建多组独立的状态对象,不同组的实例互不干扰,适合复杂业务场景。
内容的提问来源于stack exchange,提问作者Liang Aidan
相关产品推荐
相关产品推荐

