为什么在__init__外定义对象变量不被推荐?

23 投票
1 回答
13953 浏览
提问于 2025-04-18 16:13

我有时候会在__init__方法外面定义一个对象变量。plint和我的IDE(PyCharm)对此表示不满。

class MyClass():
    def __init__(self):
        self.nicevariable = 1   # everyone is happy

    def amethod(self):
        self.uglyvariable = 2   # everyone complains

plint的输出:

W:  6, 8: Attribute 'uglyvariable' defined outside __init__ (attribute-defined-outside-init)

为什么这样做是不正确的呢?

1 个回答

31

Python 允许你随时添加和删除属性。不过,如果你不在 __init__ 方法里这样做,会有两个问题:

  1. 你的定义不会集中在一个地方,可能会让人看得很乱。
  2. 如果你在一个函数里使用这个属性,可能会发现你还没有定义它。

要解决上面提到的在后面设置属性的问题,可以在 __init__ 方法里这样定义:

self.dontknowyet = None      # Everyone is happy

撰写回答