Python中如何从内部类修改外部类实例的属性?
问题解决:内部类修改外部类实例属性
原代码的问题在于Wheel.puncture方法中修改的是Bike类的属性(Bike.Status),而非对应Bike实例的属性。要让每个Wheel实例能修改所属Bike实例的Status,需要让Wheel持有对应Bike实例的引用。
修改步骤:
- 给内部类
Wheel的构造方法增加bike参数,用于存储所属的Bike实例引用 - 在Bike实例化Wheel时,将当前Bike实例(
self)传入Wheel的构造方法 - 在
puncture方法中,通过保存的Bike实例引用修改其Status属性 - 修正
Bike.show方法中的笔误:self.Etat改为self.Status
修改后的完整代码:
class Bike(object): def __init__(self, Name, StatusFrontWheel, StatusRearWheel): self.name = Name self.Status = 'OK' # 创建Wheel时传入当前Bike实例 self.FrontWheel = self.Wheel(StatusFrontWheel, self) self.RearWheel = self.Wheel(StatusRearWheel, self) def show(self): print('In outer class') print('Name:', self.name) # 修正笔误:Etat改为Status print('Status:', self.Status) class Wheel(object): def __init__(self, WheelStatus, bike): self.WheelStatus = WheelStatus # 保存所属的Bike实例引用 self.bike = bike def puncture(self): self.WheelStatus = 'NOK' # 通过引用修改对应Bike实例的Status self.bike.Status = 'NOK'
测试验证:
Bike1 = Bike('MyBike1', 'OK', 'OK') Bike2 = Bike('MyBike2', 'OK', 'OK') print(Bike2.FrontWheel.WheelStatus) # 输出 'OK' Bike2.FrontWheel.puncture() # 触发爆胎 print(Bike2.Status) # 输出 'NOK',符合预期 print(Bike1.Status) # 输出 'OK',不影响其他实例
这样修改后,每个Wheel实例都绑定到对应的Bike实例,调用puncture时只会修改所属Bike实例的Status,不会影响类属性或其他Bike实例。
内容的提问来源于stack exchange,提问作者Xavier
相关产品推荐
相关产品推荐

