我只是想知道,为什么__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'
答案 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
对象不同,就像一个球与球概念不同。球可以是蓝色的。球的概念不能。