我如何评价
a = myobject.id.number
如果 myobject 是,则返回 NoneNone
内置getattr
?也许getattr(myobject, "id.number", None)
?
我如何评价
a = myobject.id.number
如果 myobject 是,则返回 NoneNone
内置getattr
?也许getattr(myobject, "id.number", None)
?
getattr(getattr(myobject, "id", None), "number", None)
应该管用。
这应该可以很好地扩展到任何深度:
reduce(lambda obj, attr : getattr(obj, attr, None), ("id","num"), myobject)
我最喜欢的是
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
这是一个单行
a = myobject is not None and myobject.id.number or None
它不检查 id 是否为 None,但这不是原始问题的一部分。
考虑所有成员的稍微过于通用的解决方案:
if myobject and myobject.id and myobject.id.number:
a = myobject.id.number
else:
a = None
return myobject.id.number if myobject else None