Luc*_*iel 11 python static scope class
所以我有一个类,我将其用作本地命名空间.我在类中有一些静态函数,但它们无法访问类范围变量.为什么是这样?
class Foo:
foo_string = "I am a foo"
@staticmethod
def foo():
print foo_string
Run Code Online (Sandbox Code Playgroud)
>>> Foo.foo()
[Stack Trace]
NameError: global name 'foo_string' is not defined
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
Gar*_*tty 12
Python不允许类变量以这种方式落入范围,有两种方法可以做到这一点,第一种是使用类方法:
@classmethod
def foo(cls):
print(cls.foo_string)
Run Code Online (Sandbox Code Playgroud)
我认为这是最好的解决方案.
第二种是通过名称访问:
@staticmethod
def foo():
print(Foo.foo_string)
Run Code Online (Sandbox Code Playgroud)
请注意,一般来说,使用类作为命名空间并不是最好的方法,只需使用具有顶级函数的模块,因为这样可以更好地执行操作.
缺乏这样的范围的原因主要是由于Python的动态特性,当你将一个函数插入类时它会如何工作?它必须有条件地添加特殊行为,这将非常难以实现并且可能非常脆弱.它还有助于保持事物的显式而不是隐式 - 很清楚什么是类变量而不是局部变量.