我似乎不确定Python如何处理类中的变量范围。这个简单的类演示了我的问题:
x = 5 # Outside class scope
class SomeClass:
x = 17 # Inside class scope
# Generator expression should use x = 17 from inside class scope
y = (x for i in range(10))
输出:
>>> list(SomeClass.y)
[5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
显然,生成器表达式从类内部忽略了x = 17
。所以,我想我可以将其更改为列表理解:
x = 5 # Outside class scope
class SomeClass:
x = 17 # Inside class scope
# List expression should use x = 17 from inside class scope
y = [x for i in range(10)]
输出(Python 2.x):
>>> SomeClass.y
[17, 17, 17, 17, 17, 17, 17, 17, 17, 17]
在Python 2.x中,列表推导似乎使用了该类的范围。但是,在Python 3.x中不是这样:
输出(Python 3.x):
>>> SomeClass.y
[5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
如果要使用Python 3.x,如何使用类的变量范围?生成器理解和列表理解似乎都无法使用类范围。