全局变量Python类

46 投票
1 回答
145145 浏览
提问于 2025-04-16 20:15

在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,但那样是错误的。

撰写回答