1
以下代码打印a1 m
与python2,python3,Jython和pypy的。因此,我认为这是想要的行为。不过,我不明白为什么在C1
类范围x
使用周围的功能范围进行评估,而在C2
以下x = x
使得前x
评估使用周围的模块范围。初始化内蟒类,模块或功能范围
x = "m"
def a1():
x = "a1"
class C1(object):
print(x)
a1()
def a2():
x = "a2"
class C2(object):
print(x)
x = x
a2()
在附加的内部函数使用线x = x
是一个语法错误,这是好的。但是,在一个内部类的函数中,这似乎是可以接受的,虽然有相当怪异的语义?
是,x是那么一个新的类变量。我想知道为什么是x的是初始化的类变量评估进行评估,以周边模块范围,而不是周围的功能范围。这两个'M M'或'A1 a2'会莫名其妙的罚款。但为什么'a1 m' – pba