【发布时间】:2023-03-22 10:01:01
【问题描述】:
我正在尝试为一个类编写一个函数,该函数接受一堆文件并将它们作为属性添加到类中。
现在我有一个班级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
不幸的是,该属性被读取为“名称”,而不是列表中的值。
所以我收到如下错误:foo object has no attribute name。
我需要的是某种动态访问。我知道getattr,但据我所知,它返回一个值,我认为不适用于我的情况。你们知道什么可以在这里工作吗?
编辑:我也可以添加我需要设置为构造函数参数的东西。我不想这样做的原因是我认为它有点重载构造函数,并使它有点混乱,特别是因为参数名称会相当长。话虽如此,如果有必要,我可以这样做。
【问题讨论】:
-
你的意思是
getattr(self, name).a = 123?目前还不清楚为什么你不能将123传递到类中,你可能有更大的结构问题。你也应该使用setattr而不是调用__setattr__。 -
是的,你是对的,我想太多了,出于某种原因,我一直坚持
self.name.attribute的概念。
标签: python class dynamic attributes