为什么在__init__外定义对象变量不被推荐?
我有时候会在__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__
方法里这样做,会有两个问题:
- 你的定义不会集中在一个地方,可能会让人看得很乱。
- 如果你在一个函数里使用这个属性,可能会发现你还没有定义它。
要解决上面提到的在后面设置属性的问题,可以在 __init__
方法里这样定义:
self.dontknowyet = None # Everyone is happy