在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中不能实现这种关闭?
答案 0 :(得分:2)
类块中定义的名称范围仅限于该类 块;它没有扩展到方法的代码块
类块的范围也不会扩展到嵌套类语句的代码块。
我不清楚(对我而言)你想要做什么,但这是一个更典型的模式,它使B
成为A
的子类,从而允许B
的实例1}}访问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
答案 1 :(得分: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