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

Python嵌套类:如何通过内部类修改外部类实例属性?

解决Python内部类访问/修改外部类实例属性的问题

嘿,我懂你现在卡在哪了——你的Inner类目前完全是个独立的存在,根本没和Outer的实例绑定到一起,所以它找不到some_var属性简直太正常了。咱们一步步把这个问题搞定:

问题根源

你当前的Inner实例完全不知道自己属于哪个Outer对象,print_some_var里的self指的是Inner自己的实例,不是Outer的,自然会抛出AttributeError。要让Inner能操作Outer的属性,核心就是得让它持有外部类实例的引用。

修正后的完整代码

class Outer:
    def __init__(self):
        self.some_var = 1
        # 创建Inner时把当前Outer实例传递进去
        self.Inner = Inner(self)

class Inner:
    def __init__(self, outer_instance):
        # 把外部类实例的引用保存下来
        self.outer = outer_instance
    
    def print_some_var(self):
        # 通过保存的外部实例引用读取属性
        print("I'm Inner's method, printing:", self.outer.some_var)
    
    def change_some_var(self, n):
        # 通过外部实例引用修改属性
        self.outer.some_var = n

o = Outer()
print("Printing directly.", o.some_var)
o.Inner.print_some_var()
o.Inner.change_some_var(5)
o.Inner.print_some_var()
# 额外验证外部实例的属性确实被修改了
print("After change, outer var:", o.some_var)

关键改动说明

  • 传递外部实例引用:在Outer的__init__方法里创建Inner时,把self(也就是当前Outer的实例)传给Inner的构造函数,让两者建立关联。
  • 保存引用到Inner内部:Inner的__init__方法接收外部实例,把它存在自己的self.outer属性里,这样后续的方法就能随时访问到外部类的实例了。
  • 调整属性访问路径:把原来的self.some_var改成self.outer.some_var,这样就能正确读取和修改外部类实例的属性了。

运行这段代码后,你会得到符合预期的输出:

Printing directly. 1
I'm Inner's method, printing: 1
I'm Inner's method, printing: 5
After change, outer var: 5

内容的提问来源于stack exchange,提问作者Don Jhoe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:53:05