python类变量可以从类方法访问?

gar*_*ryp 2 python scope namespaces

我离开python已有一段时间了。我很快就违反了我的理解。考虑:

class Foo:
    a = 1
    def bar():
        print(a)
Run Code Online (Sandbox Code Playgroud)

我希望a可以通过设定规则来使用该方法:先本地,然后封闭,...

该类Foo创建一个名称空间和一个范围,不是吗? bar创建范围;它不包含在课程范围内吗?a的范围中没有定义bar,因此我希望它从封闭的范围中提取类变量。显然,我对名称空间和范围感到困惑。我已尝试阅读此书,但未能就此特定问题找到确切的说明。(self.a当然可以。)

Mar*_*ers 6

类主体不是可嵌套的作用域,不是。Python 执行模型明确排除了它:

在类块中定义的名称范围仅限于该类块。它不会扩展到方法的代码块

这是因为执行类的主体以形成类属性;将其视为具有locals的功能,并且locals成为新类对象的属性。

然后,您可以直接在类上(Foo.a)或通过实例(其中属性查找属于该类)来访问这些属性。