我有一个这样的课程
class SomeClass:
def doSomething(self):
self.counter = 50
我为x
SomeClass
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
为什么会这样?创建实例后,是否所有数据属性都不可用?
感谢。
答案 0 :(得分: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
之前它的值将为{{1}}。从本质上讲,这个主题有很多变化,可以让你实现你感兴趣的确切语义。