Проблема со статической переменной - PullRequest
1 голос
/ 15 февраля 2011

Я пытаюсь объявить статическую переменную, и теперь мой код:

class StaticClass:
    varA = 'hello'

    @staticmethod
    def staticMethod():
        varA='bye'

Результат кода ниже привет.Почему бы не "до свидания"?

StaticClass.staticMethod()

print StaticClass.varA

Ответы [ 2 ]

4 голосов
/ 15 февраля 2011

Код в staticMethod() назначает строку bye локальной переменной varA, а затем возвращает, удаляя локальную переменную. Присвоение внутри функции всегда создает локальные переменные в Python. staticmethod в Python вообще не имеет доступа к классу - для этого вам нужно classmethod:

class StaticClass:
    var_a = 'hello'

    @classmethod
    def cls_method(cls):
        cls.var_a = 'bye'
1 голос
/ 15 февраля 2011

Это потому, что varA, который вы определили в StaticClass.staticMethod(), находится в пространстве имен метода, а не в пространстве имен класса, если вы хотите получить доступ к классу varA, вы должны сделать что-то вроде:

StaticClass.varA = 'bye'

Кстати, вам не нужно создавать статический метод для этого.

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