Python constructors convention
我想知道Python中是否有关于构造函数的约定。如果我有一个构造函数什么都不做,我基本上可以不写它,一切都会很好。然而,当我使用Pycharm时,它建议我(警告)写一个空构造函数:
1 2 | __init__: pass |
我在PEP8中没有发现任何关于这个问题的信息。我想知道Pycharm是刚刚推出了一个新的约定,还是背后有什么原因?
谢谢。
我认为这是基于意见的,但我将分享我试图遵循的规则:1. 在构造函数中声明所有实例变量,即使它们还没有设置
1 2 3 | def __init__(self, name): self.name = name self.lname = None |
不要在构造函数中执行任何逻辑。当您尝试编写单元测试时,您将从中受益。
当然,如果没有必要,不要添加它。
我同意不写不必要的代码的观点。警告可能是为了帮助加速开发,因为大多数类可能都有init,这将提醒您提前编写它。
可以在设置->编辑器->检查-> Python ->"类没有
当我创建一个小的、特殊的类时,我经常看到这种情况。我用这个警告作为提示:
I forgot to derive the class from something sensible.
异常对象
例如,我将使用到
没有:
1 2 | class CustomException: pass |
是的:
1 2 | class CustomException(Exception): pass |
因为
新样式对象
另一个例子,一个不需要任何成员变量的小类。新样式对象(在python2中显式,在python3中隐式)派生自类
1 2 | class SettClass(object) pass |
类似地,警告也会消失,因为
旧式对象
或者干脆禁用警告:
1 2 3 | # noinspection PyClassHasNoInit class StubbornClass: pass |
如果构造函数不做任何事情,就不要添加它。有些编辑喜欢警告你一些愚蠢的事情。例如,Eclipse会在变量初始化但以后不使用或类没有可序列化id时发出警告,但这是Java。如果您的程序在没有它的情况下运行,则删除构造函数。