初始化数据属性

bdh*_*har 0 python attributes class function member

我有这样的课

class SomeClass:
    def doSomething(self):
        self.counter = 50
Run Code Online (Sandbox Code Playgroud)

我创建一个实例xSomeClass

x = SomeClass()
Run Code Online (Sandbox Code Playgroud)

当我试图得到这样的计数器的值:x.counter我得到以下错误 -

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: SomeClass instance has no attribute 'counter'
Run Code Online (Sandbox Code Playgroud)

但是在我调用成员函数x.doSomething()然后查找数据属性之后,它就可用了.

>>> x.doSomething()
>>> x.counter
50
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

Eli*_*sky 7

不,self.counter只有在doSomething()被调用时才被创建.在Python中,实例属性是动态的,可以在运行时创建.要从self.counter对象的创建中获得,请将其初始化放在构造函数中:

class SomeClass:
    def __init__(self):
        self.counter = None
    def doSomething(self):
        self.counter = 50
Run Code Online (Sandbox Code Playgroud)

现在的所有实例都SomeClass将有self.counter从开始,但它的价值将是None,直到doSomething被调用.从本质上讲,这个主题有很多变化,可以让你实现你感兴趣的确切语义.