Python中的动态类属性?

时间:2015-06-11 20:35:58

标签: python class dynamic attributes

我试图为一个带有大量文件的类编写一个函数,并将它们作为属性添加到类中。

现在我有一些课程foo和另一个课程bar。我想基本上浏览一个字符串列表(这是简化的),并将每个字符串添加为foo的属性,并且每个属性都是类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,但据我所知,这会返回一个值,而我认为不适用于我的情况。你们知道在这里有什么用吗?

编辑:我也可以添加我需要设置为构造函数参数的东西。我不喜欢这样做的原因是我认为它会使构造函数重载,并使它变得混乱,特别是因为参数名称会相当长。话虽如此,如有必要,我可以这样做。

1 个答案:

答案 0 :(得分:3)

将bar-instance保存在本地变量中:

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