你应该使用
getattr
包装器来获取
id
的值,而不是直接检索它。
a = getattr(myobject, 'id', None)
这就像是说“我想从对象
myobject
中检索属性
id
,但如果对象
myobject
中没有属性
id
,则返回
None
。” 但它执行得更有效率。
一些对象还支持以下形式的
getattr
访问:
a = myobject.getattr('id', None)
根据OP的要求,'deep getattr'函数:
def deepgetattr(obj, attr):
"""Recurses through an attribute chain to get the ultimate value."""
return reduce(getattr, attr.split('.'), obj)
print deepgetattr(universe, 'galaxy.solarsystem.planet.name')
简单解释:
Reduce就像是一个原地递归函数。在这种情况下,它从obj
(宇宙)开始,然后使用getattr
逐级递归访问每个属性,因此在您的问题中,它会像这样:
a = getattr(getattr(myobject, 'id', None), 'number', None)
a = myobject.id.number
,该怎么办? - alwbtc