如何访问没有自我类范围的变量?(How to access class-scope variable

2019-07-02 09:51发布

所以我有一个类,我现在把它用作一个局部命名空间,其。 我在班上一些静态的功能,但它们不能访问类范围的变量。 为什么是这样?

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

有什么想法吗?

Answer 1:

Python没有让类变量落入这一范围的方式,有两种方法可以做到这一点,首先是使用一个类的方法:

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

这我认为是最好的解决方案。

二是按名称访问:

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

请注意,在一般情况下,使用类作为名称空间是不是做的最好的方法,只要使用具有顶级的功能,而不是一个模块,因为这样的行为更多,只要你想。

究其原因,缺少作用域是这样的,主要是由于Python的动态特性,它怎么会当你插入函数到类工作? 它必须有特殊的行为添加到它有条件地,这将是非常尴尬的实施和潜在的脆弱。 这也有助于保持明确的东西,而不是隐 - 很明显是什么,而不是一个局部变量类变量。



文章来源: How to access class-scope variables without self?