【发布时间】:2012-03-19 08:15:01
【问题描述】:
阅读documentation我遇到了以下段落:
范围定义名称在块中的可见性。如果一个本地 变量在块中定义,其范围包括该块。如果 定义发生在功能块中,范围扩展到任何块 包含在定义中,除非包含的块引入 名称的不同绑定。 a 中定义的名称范围 类块仅限于类块;它不延伸到 方法的代码块 - 这包括理解和生成器 表达式,因为它们是使用函数范围实现的。
我决定自己尝试从方法中访问类变量:
>>> class A():
i = 1
def f(self):
print(i)
>>> a = A()
>>> a.i
1
>>> a.f()
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
a.f()
File "<pyshell#4>", line 4, in f
print(i)
NameError: global name 'i' is not defined
我知道变量i可以通过显式指向类名A.i来访问:
>>> a = A()
>>> class A():
i = 1
def f(self):
print(A.i)
>>> a = A()
>>> a.f()
1
问题是为什么语言的开发者让类变量在方法中不可见?其背后的原理是什么?
【问题讨论】: