Python嵌套类如何获取外层父类的实例self变量
Python嵌套类访问外层实例属性的解决方法
Python的嵌套类默认不会自动绑定外层类的实例,原有代码报错的核心原因有三点:
- 嵌套类是Parent的类属性,直接通过
parent.Child()实例化时,Child实例不会自动持有外层Parent实例的引用 - 嵌套的Child类和Parent类是嵌套关系,不是继承关系,
super()获取的是Child的父类(默认是object),和外层Parent类无关 super()返回的是父类代理对象,不支持[]索引取值操作
可行实现方案
方案1:实例化Child时主动传入Parent实例
class Parent: def __init__(self): self.x = 1 self.y = 2 class Child: # 初始化时新增参数接收外层Parent实例 def __init__(self, parent_instance): self.parent = parent_instance def parent_vars(self): # 直接通过存储的parent实例访问对应属性 att = self.parent.x print(att) parent = Parent() # 实例化Child时传入当前parent实例 child = parent.Child(parent) child.parent_vars() # 运行输出1
方案2:封装实例创建方法,自动传参(更易用)
如果不想每次手动传入Parent实例,可以在Parent类中封装Child实例的创建方法,自动注入当前Parent实例:
class Parent: def __init__(self): self.x = 1 self.y = 2 # 封装创建Child实例的方法 def create_child(self): return self.Child(self) class Child: def __init__(self, parent_instance): self.parent = parent_instance def parent_vars(self): att = self.parent.x print(att) parent = Parent() child = parent.create_child() child.parent_vars() # 运行输出1
内容的提问来源于stack exchange,提问作者Kuno
相关产品推荐
相关产品推荐

