python - 如何避免 __init__ 中的 "self.x = x; self.y = y;

我看到类似的模式

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

非常频繁,通常带有更多参数。有没有避免这种乏味重复的好方法?类是否应该从 namedtuple 继承?

最佳答案

免责声明:似乎有几个人关心提出这个解决方案,所以我将提供一个非常明确的免责声明。您不应使用此解决方案。我仅将其作为信息提供,因此您知道该语言可以做到这一点。剩下的答案只是展示语言能力,而不是支持以这种方式使用它们。


将参数显式复制到属性中并没有什么问题。如果 ctor 中有太多参数,有时会被认为是代码异味,也许您应该将这些参数分组到更少的对象中。其他时候,这是必要的,没有任何问题。 无论如何,明确地这样做是要走的路。

但是,既然您问的是如何完成(而不是是否应该完成),那么一种解决方案是:

class A:
    def __init__(self, **kwargs):
        for key in kwargs:
          setattr(self, key, kwargs[key])

a = A(l=1, d=2)
a.l # will return 1
a.d # will return 2

关于python - 如何避免 __init__ 中的 "self.x = x; self.y = y; self.z = z"模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35190877/

相关文章:

linux - 如何使用 sed 删除文件的最后 n 行

linux - Linux 环境变量名称中允许的字符

python - 如何打开一个文件进行读写?

python - 如何实现有序的默认字典?

python - 你如何在 django 网站上记录服务器错误

python - pip 相当于 `npm install package --save-dev`

python - 在 Pandas 中附加到一个空的 DataFrame?

python - 如何使用 python smtplib 向多个收件人发送电子邮件?

linux - 如何通过脚本创建 crontab

linux - 递归列出目录中的所有文件,包括符号链接(symbolic link)目录中的文件