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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:15:02