全局变量Python类
在Python中,如何正确地定义一个具有类作用域的全局变量呢?
我之前学过C/C++/Java,所以我认为这样做是对的:
class Shape:
lolwut = None
def __init__(self, default=0):
self.lolwut = default;
def a(self):
print self.lolwut
def b(self):
self.a()
1 个回答
102
你说的没错,虽然你不应该称它为全局变量,它其实是一个类属性,可以通过类来访问,比如用 Shape.lolwut
,也可以通过实例来访问,比如用 shape.lolwut
。不过在设置这个属性的时候要小心,因为这样做会设置一个实例级别的属性,而不是类属性。
class Shape(object):
lolwut = 1
shape = Shape()
print Shape.lolwut, # 1
print shape.lolwut, # 1
# setting shape.lolwut would not change class attribute lolwut
# but will create it in the instance
shape.lolwut = 2
print Shape.lolwut, # 1
print shape.lolwut, # 2
# to change class attribute access it via class
Shape.lolwut = 3
print Shape.lolwut, # 3
print shape.lolwut # 2
输出结果:
1 1 1 2 3 2
有人可能会期待输出是 1 1 2 2 3 3
,但那样是错误的。