Class __init__ 属性,DRY 与 IDE 功能

Class __init__ attributes, DRY vs IDE functinality

在 class __init__ 方法中遵循 DRY 规则的正确方法是什么?

我知道这两种方式:

class Foo:
    def __init__(self, x, y, z=None):
        self.x = x
        self.y = y
        self.z = z

class Bar:
    _fields = ['x', 'y', 'z']

    def __init__(self, x, y, z=None):
        for field in self.__class__._fields:
            setattr(self, field, locals()[field])

Foo 中的方法非常重复,您必须将每个属性名称键入 3 次,在 classes 中这样做非常累人,即使是少量的属性和名称也不那么长。

另一方面,Bar 中使用的方法更短,但缺点是 IDE 不断发出警告,指出有 'unresolved references'。而且此方法不允许在 IDE 中使用点运算符功能来自动完成属性。

我正在寻找如何创建 classes 不重复属性名称并且仍然能够使用 IDE 的一些功能。

我正在使用 PyCharm 作为我的 IDE,但如果有人支持我正在尝试做的事情,我会很乐意更改为任何其他。

"On the other hand, the method used in Bar is way shorter"

不是真的...在您的示例中,行数相同但字符多得多。当无论如何减少参数的数量...

使用第一个版本。你的未来self/collaborators会感谢你1.

1其实你未来的合作者可能不知道要感谢你...我想更准确的说法是你的未来self/collaborators 不会因为编写难以阅读的代码而追捕你,让你的生活变得悲惨:-)