Python构造函数约定

时间:2015-02-12 16:59:53

标签: python pycharm convention

我想知道在Python中是否有关于构造函数的约定。如果我有一个构造函数什么都不做,我基本上不能写它,一切都会正常工作。 但是,当我使用Pycharm时,它建议我(警告)写一个空的构造函数:

__init__:
    pass

我在PEP8中没有找到任何关于这个问题的内容。我想知道Pycharm是否刚刚推出一个新的约定,或者是否有背后的原因?

感谢。

4 个答案:

答案 0 :(得分:4)

我认为这是基于意见的,但我会分享我试图遵循的规则:  1.在构造函数中声明所有实例变量,即使它们尚未设置

def __init__(self, name):
    self.name = name
    self.lname = None
  1. 不要在构造函数中做任何逻辑。当你试图编写单元测试时,你将从中受益。

  2. 当然,如果没有必要,请不要添加它。

答案 1 :(得分:2)

我同意不写不必要的代码的观点。这个警告可能有助于加快开发速度,因为大多数类可能都有一个init,这会提醒你提前编写它。

可以在设置 - >中自定义或禁止此警告。编辑 - >检查 - > Python - > "班级没有__init__方法"

答案 2 :(得分:1)

如果没有做任何事情,请不要添加构造函数。一些编辑喜欢警告你一些愚蠢的事情。例如,Eclipse会在变量初始化时向您发出警告,但以后不会使用,或者当类没有可序列化的ID时。但那是Java。如果你的程序在没有它的情况下运行,那么删除构造函数。

答案 3 :(得分:1)

Class has no __init__ method

当我做一个小小的临时课时,我会一直看到这一点。我使用此警告作为提示:

  

我忘了从一些明智的事情中得出这个课程。

异常对象

例如,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