【发布时间】:2025-12-09 21:40:01
【问题描述】:
我有以下课程:
class TestClass(object):
def __init__(self, **kwargs):
for key, value in kwargs.items(): #items return list of dict
setattr(self, key, value)
使用示例:
obj = MessageItem(**{"testkey1":"tval1", "tkey2":"tval2", "tkey3":"tval3"})
如何在不知道属性名称的情况下迭代此结构? Python为我们提供了内置方法__getattribute__,但我还是需要知道请求属性的名称:
print(obj.__getattribute__("testkey1"))
【问题讨论】:
-
为什么要故意将自己置于这种情况而不是将其存储为
dict? -
@JonClements Personaly,我不知道,我的领导是这样计划的,我必须实施:D
-
好吧,随时告诉他们这不是好的设计,而且有点危险......人们将能够破坏你已经使用过的名称并破坏事物并稍后对其进行调试太可怕了。
-
(或者相反,您可能会破坏对他们传递的变量的赋值......)
-
请注意(除此之外,在大多数用例中这是一个坏主意):你不会真的想使用
obj.__getattribute__("testkey1")- 你会使用getattr(obj, 'testkey1')- 不仅是在眼睛和键盘上更容易,它还允许提供默认值以在未找到属性时返回。
标签: python