Python:如何使用getattr获取对象属性的属性?

时间:2013-02-17 19:39:35

标签: python object attributes

我如何评估

a = myobject.id.number

如果myobject为None

,则返回None

内置getattr?也许getattr(myobject, "id.number", None)

6 个答案:

答案 0 :(得分:5)

这应该适用于任何深度:

reduce(lambda obj, attr : getattr(obj, attr, None), ("id","num"), myobject)

答案 1 :(得分:3)

getattr(getattr(myobject, "id", None), "number", None)

应该有用。

答案 2 :(得分:1)

这是一个单行

a = myobject is not None and myobject.id.number or None

它不会检查id是否为None,但这不是原始问题的一部分。

答案 3 :(得分:0)

略微过于通用的解决方案,以便查看所有成员:

if myobject and myobject.id and myobject.id.number:
    a = myobject.id.number
else:
    a = None

答案 4 :(得分:0)

return myobject.id.number if myobject else None

答案 5 :(得分:0)

我的最爱是

from functools import reduce
try:
  a = reduce(getattr, ("id", "number"), myobject)
except AttributeError:
  a = None

from operator import attrgetter
try:
  a = attrgetter('id.number')(myobject)
except AttributeError:
  a = None