所以我有一个类,我现在把它用作一个局部命名空间,其。 我在班上一些静态的功能,但它们不能访问类范围的变量。 为什么是这样?
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
有什么想法吗?
Python没有让类变量落入这一范围的方式,有两种方法可以做到这一点,首先是使用一个类的方法:
@classmethod
def foo(cls):
print(cls.foo_string)
这我认为是最好的解决方案。
二是按名称访问:
@staticmethod
def foo():
print(Foo.foo_string)
请注意,在一般情况下,使用类作为名称空间是不是做的最好的方法,只要使用具有顶级的功能,而不是一个模块,因为这样的行为更多,只要你想。
究其原因,缺少作用域是这样的,主要是由于Python的动态特性,它怎么会当你插入函数到类工作? 它必须有特殊的行为添加到它有条件地,这将是非常尴尬的实施和潜在的脆弱。 这也有助于保持明确的东西,而不是隐 - 很明显是什么,而不是一个局部变量类变量。