__init__
在大多数情况下,我建议使用第一个版本,在第一个版本中,将类型分配给方法的参数。
该特定方法的冗余最少,同时仍允许类型检查器验证您__init__
是否在代码的其他位置正确调用了该方法。
我建议您使用第二个或第三个版本,__init__
当您的__init__
方法变得足够复杂到可以应用以下一项或多项内容时,您可以在其中显式注释字段(内部或外部):
但是,我不清楚是首选第二版还是第三版- 我个人更喜欢第三版,因为它在概念上更简洁,并且似乎没有将实例属性与类属性混合使用,但是我不能否认第二个版本看起来更干净。
我在“键入”问题通道上进行了询问,并得到了Guido的以下回复(Gudo是您不知道的人,他使用Python,目前正在研究mypy并键入相关内容):
无论哪种方式,都有强烈的意见。我确实确实更喜欢将属性注释放在类主体中,而不是在整个__init__
方法和其他方法中使用它们。我还认为,使用PEP 526,这将是未来(还包括基于类的NamedTuple声明以及https://github.com/ericvsmith/dataclasses之类的东西)。
(引用链接)
因此,似乎推荐使用第二个版本而不是第三个版本,并且在将来的某个时候,以这种方式定义类将更加深入地集成到Python语言本身中!
PEP 557,数据类是最近接受(?),似乎是在赛道上被包括在Python 3.7。