初始化数据属性

时间:2011-03-22 08:16:53

标签: python class function attributes member

我有一个这样的课程

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

为什么会这样?创建实例后,是否所有数据属性都不可用?

感谢。

1 个答案:

答案 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}}。从本质上讲,这个主题有很多变化,可以让你实现你感兴趣的确切语义。