从另一个嵌套类访问属性

时间:2018-12-17 21:03:32

标签: python python-3.x

我想实现类似于此构造的东西:

class Outer:
    class A:
        foo = 1

    class B:
        def __init__(self):
            self.bar = A.foo

Outer.B().bar  # ==> 1

但这失败了

NameError: name 'A' is not defined

我什至不确定我为什么理解A的范围。

您能帮我弄清楚为什么它不起作用以及如何解决吗?

4 个答案:

答案 0 :(得分:2)

仅在globalslocals和非本地单元格中查找名称​​ (但此处没有闭包)。

编写Outer.A而不是A,或考虑将Outer做成模块。

答案 1 :(得分:1)

如果您使用Outer.A.foo,则可以使用。

答案 2 :(得分:1)

就像您为Outer.B().bar做的一样:对self.bar=Outer.A().foo做同样的事情

答案 3 :(得分:1)

Python中的内部类不具有封闭类成员的权限。如您所声明的,A不在B的范围内。 A和B都在“外部”范围内,但彼此之间不认识。因此,可以解决您的问题:

$class= array_get($data, 'class', 'id');