数据属性的初始化

0 投票
1 回答
2049 浏览
提问于 2025-04-16 14:10

我有一个这样的类

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。当然,这个主题还有很多变种,可以让你实现你想要的具体功能。

撰写回答