Python嵌套类如何调用外层类实例的属性?
解决内层类调用外层类实例属性的问题
你的代码报错的核心原因有两个:一是example变量在你尝试访问它的时候还没被创建(example = CamelCase()是在CamelCase初始化之后才执行的);二是CamelCase_2根本不知道它属于哪个CamelCase实例——每个CamelCase实例都有自己独立的variable属性,你得把外层实例的引用传递给内层类才行。
下面是两种可行的实现方式:
方式一:传递外层实例引用给内层类
这是最直接的解决方案,在创建CamelCase_2实例时,把当前的CamelCase实例(也就是self)传进去,让内层类保存这个引用:
class CamelCase: def __init__(self): self.variable = 'foo' # 将当前CamelCase实例传给CamelCase_2 self.variable2 = CamelCase_2(self) class CamelCase_2: def __init__(self, outer_instance): # 保存外层实例的引用 self.outer = outer_instance # 现在可以正常访问外层属性并调用upper() self.processed_var = self.outer.variable.upper() # 自定义打印时的显示内容,避免输出默认的对象内存地址 def __repr__(self): return self.processed_var example = CamelCase() print(example.variable2) # 输出: FOO
方式二:使用真正的嵌套类(类定义在类内部)
如果你的CamelCase_2本来就应该是CamelCase的内部类,也可以把它定义在CamelCase内部,原理还是传递外层实例引用:
class CamelCase: def __init__(self): self.variable = 'foo' # 调用内部类时传入当前实例 self.variable2 = self.CamelCase_2(self) # 嵌套类定义在CamelCase内部 class CamelCase_2: def __init__(self, outer_instance): self.outer = outer_instance self.processed_var = self.outer.variable.upper() def __repr__(self): return self.processed_var example = CamelCase() print(example.variable2) # 输出: FOO
关键说明
- 不要试图直接在
CamelCase_2里用全局变量(比如你原来的example),这会让代码耦合严重,而且无法支持多个CamelCase实例的场景。 - 通过传递外层实例引用,
CamelCase_2可以准确访问到关联的外层实例的属性,不管你创建多少个CamelCase实例,每个CamelCase_2都能对应到正确的外层对象。
内容的提问来源于stack exchange,提问作者user7525112
相关产品推荐
相关产品推荐

