我想实现类似于此构造的东西:
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
的范围。
您能帮我弄清楚为什么它不起作用以及如何解决吗?
答案 0 :(得分:2)
仅在globals
,locals
和非本地单元格中查找名称 (但此处没有闭包)。
编写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');