Глобальные переменные классы Python - PullRequest
28 голосов
/ 25 июня 2011

Как правильно определить глобальную переменную, имеющую классную область в 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 Ответ

68 голосов
/ 25 июня 2011

То, что вы имеете, является правильным, хотя вы не будете называть его глобальным, это атрибут класса, к которому можно получить доступ через класс, например, 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, но это будет неверно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...