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

Python中如何从内部类修改外部类实例的属性?

问题解决:内部类修改外部类实例属性

原代码的问题在于Wheel.puncture方法中修改的是Bike类的属性(Bike.Status),而非对应Bike实例的属性。要让每个Wheel实例能修改所属Bike实例的Status,需要让Wheel持有对应Bike实例的引用。

修改步骤:

  1. 给内部类Wheel的构造方法增加bike参数,用于存储所属的Bike实例引用
  2. 在Bike实例化Wheel时,将当前Bike实例(self)传入Wheel的构造方法
  3. 在puncture方法中,通过保存的Bike实例引用修改其Status属性
  4. 修正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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 07:37:04