我试图为一个带有大量文件的类编写一个函数,并将它们作为属性添加到类中。
现在我有一些课程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
,但据我所知,这会返回一个值,而我认为不适用于我的情况。你们知道在这里有什么用吗?
编辑:我也可以添加我需要设置为构造函数参数的东西。我不喜欢这样做的原因是我认为它会使构造函数重载,并使它变得混乱,特别是因为参数名称会相当长。话虽如此,如有必要,我可以这样做。
答案 0 :(得分:3)
将bar-instance保存在本地变量中:
for name in list:
bar_value = bar(a, b, ..)
setattr(self, name, bar_value)
bar_value.a = 123