2

我只是想知道,为什么__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'
4

2 回答 2

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

于 2012-05-30T02:21:40.593 回答
1

类是对象的蓝图。该__init__方法在每个对象上运行以设置其内容。你做了一个__init__说“每个a对象都应该从一个data属性开始”。

现在你想data通过a类本身来访问。

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

于 2012-05-30T04:13:00.867 回答