数据属性的初始化
我有一个这样的类
class SomeClass:
def doSomething(self):
self.counter = 50
我为这个类创建了一个实例,叫做 x
x = SomeClass()
当我尝试通过 x.counter
来获取计数器的值时,出现了以下错误 -
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: SomeClass instance has no attribute 'counter'
但是在我调用了成员函数 x.doSomething()
之后,再去查看数据属性时,它就可以用了。
>>> x.doSomething()
>>> x.counter
50
这是为什么呢?难道一创建实例,所有的数据属性就应该都能用了吗?
谢谢。
1 个回答
7
不,self.counter
只有在调用 doSomething()
时才会被创建。在Python中,实例属性是动态的,可以在运行时创建。如果你想让 self.counter
在对象创建时就可用,可以把它的初始化放在构造函数里:
class SomeClass:
def __init__(self):
self.counter = None
def doSomething(self):
self.counter = 50
现在,所有的 SomeClass
实例在一开始就会有 self.counter
,不过它的值会是 None
,直到调用 doSomething
。当然,这个主题还有很多变种,可以让你实现你想要的具体功能。