在 Python 中,如果我定义一个变量:
my_var = (1,2,3)
并尝试在类的__init__
函数中访问它:
class MyClass:
def __init__(self):
print my_var
我可以访问它并打印 my_var
而无需声明 (global my_var)。
但是,如果我将 my_var
放在 class MyClass
之后,我会收到范围错误 (未找到全局变量)
。
这是什么原因?我应该怎么做?我在哪里可以阅读这方面的知识来学习?我确实阅读了 Python 类页面,但没有遇到它的解释。
谢谢
最佳答案
补充@mgilson 的回答: 请注意,Python 类变量在类实例之间共享。而且这种行为可能非常出乎意料并且看起来很奇怪。在实践中它是这样工作的:
class MyClass(object):
my_var = 10
def __init__(self):
print(self.my_var)
m1 = MyClass()
print(m1.my_var)
>>> 10 # this is fine
MyClass.my_var = 20
print(m1.my_var)
>>> 20 # WTF? :) --> shared value
m2 = MyClass()
print(m2.my_var)
>>> 20 # this is expected
m1.my_var = 30
print(MyClass.my_var)
>>> 20 # this is also expected
MyClass.my_var = 40
print(m1.my_var)
>>> 30 # But WHY? Isn't it shared? -->
# The value WAS shared until m1.my_var = 30 has happened.
print(m2.my_var)
>>> 40 # yep m2.my_var's value is still shared :)
关于Python 变量作用域和类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12941748/