Как получить доступ к переменным класса?

Поэтому у меня есть класс, который я использую как локальное пространство имен. У меня есть некоторые статические функции в классе, но они не могут получить доступ к переменным видимости класса. Почему это?

class Foo: foo_string = "I am a foo" @staticmethod def foo(): print foo_string 

 >>> Foo.foo() [Stack Trace] NameError: global name 'foo_string' is not defined 

Есть предположения?

    One Solution collect form web for “Как получить доступ к переменным класса?”

    Python не допускает, чтобы переменные класса попадали в область видимости таким образом, есть два способа сделать это, во-первых, использовать метод класса:

     @classmethod def foo(cls): print(cls.foo_string) 

    Я бы сказал, что это лучшее решение.

    Второй – доступ по имени:

     @staticmethod def foo(): print(Foo.foo_string) 

    Обратите внимание, что в целом использование класса в качестве пространства имен – это не лучший способ сделать это, просто используйте модуль с функциями верхнего уровня, так как это действует больше, чем вы хотите.

    Причина отсутствия такой области зрения объясняется главным образом динамической природой Python, как она будет работать, когда вы вставляете функцию в класс? Это должно было бы иметь специальное поведение, добавленное к нему условно, что было бы крайне неудобно реализовать и потенциально хрупко. Это также помогает держать вещи явными, а не подразумеваемыми – ясно, что такое переменная класса, а не локальная переменная.

    Python - лучший язык программирования в мире.