我已经离开python一段时间了。我很快就违背了我的理解。考虑:
class Foo:
a = 1
def bar():
print(a)
我希望通过范围规则使方法可以使用a
:首先是本地,然后是封闭,......
类Foo
创建命名空间和范围,不是吗? bar
创建范围;是不是被班级的范围所包围?在a
的范围内没有定义bar
,所以我希望它从封闭范围中获取类变量。显然我对命名空间和范围感到困惑。我已经尝试过对此进行阅读,但未能就这一点发现明确的澄清。 (self.a
当然有用。)
答案 0 :(得分:5)
类主体不是可嵌套的范围,不是。 Python Execution Model明确排除了它:
类块中定义的名称范围仅限于类块;它没有扩展到方法的代码块
那是因为一个类的主体被执行以形成类属性;将它看作是本地人的函数,并且本地成为新类对象的属性。
然后,您可以直接在类(Foo.a
)上访问这些属性,也可以通过实例(属性查找到达类)来访问这些属性。
答案 1 :(得分:-1)
class Foo:
def __init__(self):
self.a = 1
def bar(self):
print(self.a)
通过使用__init__()
,您可以将变量传递给其他函数。