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

Python 2.7:非继承场景下内部类如何访问外部类变量?

Python 2.7 内部类访问外部类变量的正确姿势(非继承版)

嘿,我太懂你踩的这个坑了!在Python 2.7里,内部类并不会自动绑定外部类的实例,所以你直接去访问外部类的myVar才会爆出AttributeError: myParent instance has no attribute 'myVar'的错误。而且你明确说不想让myChild继承myParent,完全没问题,咱们用非继承的方式就能解决。

先猜猜你大概写了类似这样的错误代码:

class myParent(object):
    def __init__(self):
        self.myVar = "Hello from Parent"
        self.child = self.myChild()  # 这里没把外部类实例传给内部类

    class myChild(object):
        def print_var(self):
            print(self.myVar)  # self指向的是myChild实例,根本没有myVar

obj = myParent()
obj.child.print_var()

错误原因

myChild的实例是独立存在的,它不知道自己属于哪个myParent实例。你在myChild里用self.myVar时,self指的是myChild自己的实例,自然找不到myVar这个属性。

正确解法1:给内部类传入外部类实例引用

这是最常用的方法——创建内部类实例时,把外部类的self传进去,让内部类保存这个引用,之后通过引用访问外部类的变量:

class myParent(object):
    def __init__(self):
        self.myVar = "Hello from Parent"
        # 创建内部类时,把当前myParent实例传进去
        self.child = self.myChild(self)

    class myChild(object):
        def __init__(self, parent_instance):
            # 保存外部类实例的引用
            self.parent = parent_instance

        def print_var(self):
            # 通过保存的引用访问外部类的实例变量
            print(self.parent.myVar)

obj = myParent()
obj.child.print_var()  # 输出: Hello from Parent

正确解法2:访问外部类的类变量(如果适用)

如果你的myVar是属于整个myParent类的类变量,而不是某个实例独有的,那可以直接通过外部类名访问,不需要传实例:

class myParent(object):
    myVar = "Hello from Parent Class"  # 类变量,属于整个类

    class myChild(object):
        def print_var(self):
            # 直接通过外部类名访问类变量
            print(myParent.myVar)

obj = myParent()
obj.child = myParent.myChild()
obj.child.print_var()  # 输出: Hello from Parent Class

这两种方法都完全满足你“不让myChild继承myParent”的需求,你可以根据myVar是实例变量还是类变量来选对应的方式~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:18:01