我有一个可以用三种不同方式命名的伪或特殊属性的对象(注意:我不控制生成对象的代码)
属性中的值(取决于设置的值)完全相同,我需要获取它以进行进一步处理,因此根据数据源,我可以有类似的东西:
>>> obj.a
'value'
>>> obj.b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Obj instance has no attribute 'b'
>>> obj.c
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Obj instance has no attribute 'c'
或者
>>> obj.a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Obj instance has no attribute 'a'
>>> obj.b
'value'
>>> obj.c
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Obj instance has no attribute 'c'
或者
>>> obj.a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Obj instance has no attribute 'a'
>>> obj.b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Obj instance has no attribute 'b'
>>> obj.c
'value'
我有兴趣获取'value'
,不幸__dict__
的是该对象中不存在属性。所以我最终为获得这个价值所做的只是打了一堆getattr
电话。假设可能性只有三种,代码如下所示:
>>> g = lambda o, l: getattr(o, l[0], getattr(o, l[1], getattr(o, l[2], None)))
>>> g(obj, ('a', 'b', 'c'))
'value'
现在,我想知道是否有更好的方法?因为我 100% 相信我所做的 :)
提前致谢