Python中实现内部类B的self指向外部主类A实例的方法咨询
Python嵌套内部类访问外部类实例的实现方案
原代码存在的问题
- 嵌套类B的实例默认不会自动绑定外部类A的实例引用,需要手动传递外部实例参数
- 代码中定义的A类属性名为
value,但printa方法中调用的是不存在的self.val,属性名不匹配 - 不建议将内部类实例的属性名与内部类类名均命名为
B,容易出现命名冲突
调整后可正常运行的代码
通用方案(支持访问外部类的实例属性)
该方案适用场景最广,既可以访问外部类的类属性,也可以访问外部类实例动态赋值的独有属性:
class A: value = 'asdf' def __init__(self): # 实例化B时传入当前A类的实例 self.b = self.B(self) class B: def __init__(self, outer_instance): # 存储外部类A的实例引用 self.outer = outer_instance def printa(self): # 通过存储的外部实例引用访问A的属性 print(self.outer.value) aa = A() aa.b.printa()
运行上述代码后会直接输出asdf,符合预期需求。
简化方案(仅支持访问外部类的类属性)
如果只需要访问A的固定类属性,不需要访问A实例的动态属性,可以简化为直接调用外部类的类属性:
class A: value = 'asdf' def __init__(self): self.b = self.B() class B: def printa(self): print(A.value) aa = A() aa.b.printa()
内容的提问来源于stack exchange,提问作者walksanator
相关产品推荐
相关产品推荐

