Python 中的动态 Class 属性?

Dynamic Class Attribute in Python?

我正在尝试为 class 编写一个函数,它接收一堆文件并将它们作为属性添加到 class。

现在我有一些 class foo,还有一些 class bar。我基本上想遍历一个字符串列表(这是简化的),并将这些字符串中的每一个添加为 foo 的属性,并且这些属性中的每一个都将是 class bar .所以 foo 有一堆 bar 类型的属性。现在我已经使用 python 的 __setattr__ 完成了这项工作,而且效果很好。真正的问题是我需要在 bar 中设置一个属性,并且我需要为每个单独的 foo 属性执行此操作。

所以现在,我有一个 for 循环:

for name in list:
  self.__setattr__(name, bar(a, b, ..))
  self.name.a = 123

不幸的是,该属性被读取为 "name" 而不是列表中的值。 所以我得到一个错误,如:foo object has no attribute name。 我需要的是某种动态访问。我知道 getattr,但据我所知,returns 是一个值,我认为它不适用于我的情况。你们知道有什么可以在这里工作的吗?

编辑:我也可以添加我需要设置为构造函数参数的东西。我不想这样做的原因是我认为它会使构造函数过载,并使它有点混乱,尤其是因为参数名称会很长。话虽这么说,但如果有必要,我可以做到。

将酒吧实例保存在局部变量中:

for name in list:
    bar_value = bar(a, b, ..)
    setattr(self, name, bar_value)
    bar_value.a = 123