__init__的变量范围

时间:2012-05-30 02:20:06

标签: python

我只是想知道,为什么__init__定义的变量无法从类中访问?它应该在实例化期间执行,以便从外部访问吗?

>>> class a:
...     data = {}
... 
>>> a.data
{}
>>> class a:
...     def __init__(self):
...             self.data = {}
... 
>>> a.data
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: class a has no attribute 'data'

2 个答案:

答案 0 :(得分:12)

__init__中定义的变量是实例变量,根据定义,它们无法从类范围访问。这就是为什么这样做的原因:

a().data # data is a member of an instance of class `a`

......虽然这不起作用:

a.data   # data is not a member of the `a` class

请注意,当您通过调用__init__创建a的新实例时,a()初始值设定项)会在所有变量上从该点开始运行__init__中定义的a中绑定的{{1}}。

答案 1 :(得分:1)

一个类是对象的蓝图。 __init__方法在每个对象上运行以设置其内容。您创建了一个__init__,其中说“每个a对象都应以data属性开头”。

现在您要通过data类本身访问a

您希望收到哪个对象data?为什么? data不属于班级本身。 a类本身与任何给定的a对象不同,就像一个球与球概念不同。球可以是蓝色的。球的概念不能。