¿Cómo acceder a las variables de scope de clase sin uno mismo?

Así que tengo una clase, que estoy usando como un espacio de nombres local. Tengo algunas funciones estáticas en la clase, pero no pueden acceder a las variables de scope de la clase. ¿Por qué es esto?

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 

¿Alguna idea?

Python no permite que las variables de clase caigan en el scope de esta manera, hay dos formas de hacer esto, la primera es usar un método de clase:

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

Lo que yo diría es la mejor solución.

El segundo es acceder por nombre:

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

Tenga en cuenta que, en general, usar una clase como espacio de nombres no es la mejor manera de hacerlo, simplemente use un módulo con funciones de nivel superior, ya que esto actúa más como usted quiere.

La razón de la falta de un scope como este se debe principalmente a la naturaleza dinámica de Python, ¿cómo funcionaría cuando inserta una función en la clase? Tendría que tener un comportamiento especial agregado condicionalmente, que sería extremadamente difícil de implementar y potencialmente frágil. También ayuda a mantener las cosas explícitas en lugar de implícitas; está claro qué es una variable de clase en lugar de una variable local.