我想知道在Python中是否有关于构造函数的约定。如果我有一个构造函数什么都不做,我基本上不能写它,一切都会正常工作。 但是,当我使用Pycharm时,它建议我(警告)写一个空的构造函数:
__init__:
pass
我在PEP8中没有找到任何关于这个问题的内容。我想知道Pycharm是否刚刚推出一个新的约定,或者是否有背后的原因?
感谢。
答案 0 :(得分:4)
我认为这是基于意见的,但我会分享我试图遵循的规则: 1.在构造函数中声明所有实例变量,即使它们尚未设置
def __init__(self, name):
self.name = name
self.lname = None
不要在构造函数中做任何逻辑。当你试图编写单元测试时,你将从中受益。
当然,如果没有必要,请不要添加它。
答案 1 :(得分:2)
我同意不写不必要的代码的观点。这个警告可能有助于加快开发速度,因为大多数类可能都有一个init,这会提醒你提前编写它。
可以在设置 - >中自定义或禁止此警告。编辑 - >检查 - > Python - > "班级没有__init__
方法"
答案 2 :(得分:1)
如果没有做任何事情,请不要添加构造函数。一些编辑喜欢警告你一些愚蠢的事情。例如,Eclipse会在变量初始化时向您发出警告,但以后不会使用,或者当类没有可序列化的ID时。但那是Java。如果你的程序在没有它的情况下运行,那么删除构造函数。
答案 3 :(得分:1)
当我做一个小小的临时课时,我会一直看到这一点。我使用此警告作为提示:
我忘了从一些明智的事情中得出这个课程。
例如,exception class我会用raise CustomException
。
没有
class CustomException:
pass
是:
class CustomException(Exception):
pass
由于Exception
定义了__init__
方法,因此此更改会使警告消失。
另一个例子,一个不需要任何成员变量的小类。 {3}}(在Python 2中显式,在Python 3中隐式)派生自类object
。
class SettClass(object)
pass
同样,警告也会消失,因为object
有__init__
方法。
或者只是禁用警告:
# noinspection PyClassHasNoInit
class StubbornClass:
pass