您应该使用getattr
包装器而不是直接检索id
.
a = getattr(myobject, 'id', None)
这就像说“我想id
从对象中检索属性,但如果对象内部myobject
没有属性,则改为返回。” 但它有效地做到了。id
myobject
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)
# usage:
print deepgetattr(universe, 'galaxy.solarsystem.planet.name')
简单解释:
Reduce就像一个就地递归函数。在这种情况下,它的作用是从obj
(universe) 开始,然后递归地为您尝试访问 using 的每个属性深入了解getattr
,所以在您的问题中,它会是这样的:
a = getattr(getattr(myobject, 'id', None), 'number', None)