1

在 python 中,我可以从内部函数访问外部函数中的变量,因此它形成了一个闭包。但是,我无法像这样从内部类访问外部类中的变量,

>>> class A:
...  a=1
...  class B:
...    b=1
...    def pr(self):
...     print a,b
...
>>> c=A().B()
>>> c.pr()
    Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 6, in pr
NameError: global name 'a' is not defined

为什么这种闭包在 python 中是不可能的?

4

2 回答 2

2

文档说:

类块中定义的名称范围仅限于类块;它没有扩展到方法的代码块

类块的范围也不扩展到嵌套类语句的代码块。


目前尚不清楚(对我而言)您要做什么,但这是一个更典型的模式,它创建B了 的子类,A因此允许 的 实例B访问B和的属性A

class A:
    a=1

class B(A):
    b=1
    def pr(self):
        print self.a, self.b

c = B()
c.pr()

印刷

1 1
于 2013-10-07T11:53:52.107 回答
1

您可以访问这些类变量,但前提是您使用定义的类的名称来限定每个变量:

class A:
    a=1
    class B:
        b=1
        def pr(self):
            print A.a, A.B.b

c=A().B()
c.pr()

结果:

1 1
于 2013-10-07T11:53:22.513 回答