我如何评估
a = myobject.id.number
如果myobject为None
内置getattr
?也许getattr(myobject, "id.number", None)
?
答案 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