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

时间:2015-01-23 22:05:13

标签: python namespaces scope

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

class Foo:
    a = 1
    def bar():
        print(a)

我希望通过范围规则使方法可以使用a:首先是本地,然后是封闭,......

Foo创建命名空间和范围,不是吗? bar创建范围;是不是被班级的范围所包围?在a的范围内没有定义bar,所以我希望它从封闭范围中获取类变量。显然我对命名空间和范围感到困惑。我已经尝试过对此进行阅读,但未能就这一点发现明确的澄清。 (self.a当然有用。)

2 个答案:

答案 0 :(得分:5)

类主体不是可嵌套的范围,不是。 Python Execution Model明确排除了它:

  

类块中定义的名称范围仅限于类块;它没有扩展到方法的代码块

那是因为一个类的主体被执行以形成类属性;将它看作是本地人的函数,并且本地成为新类对象的属性。

然后,您可以直接在类(Foo.a)上访问这些属性,也可以通过实例(属性查找到达类)来访问这些属性。

答案 1 :(得分:-1)

class Foo:
    def __init__(self):
        self.a = 1

    def bar(self):
        print(self.a)

通过使用__init__(),您可以将变量传递给其他函数。