[英]Python: How to get attribute of attribute of an object with getattr?
我如何评价
a = myobject.id.number
如果 myobject 为 None,则返回None
内置getattr
? 也许getattr(myobject, "id.number", None)
?
这应该可以很好地扩展到任何深度:
reduce(lambda obj, attr : getattr(obj, attr, None), ("id","num"), myobject)
getattr(getattr(myobject, "id", None), "number", 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
我最喜欢的是
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
我使用以下 function,它适用于任何级别。
def Resolve(object, attribute:str):
"""
Resolve attribute of an object.
"""
attribute_list = attribute.split(".")
obj = object
try:
for att in attribute_list:
obj = getattr(obj, att)
except AttributeError:
obj = None
return obj
要使用它你写:
a = Resolve(myobject, 'id.number')
该代码只是使用句点字符拆分字符串并循环遍历属性。 如果你有另一个级别说“myobject.id.number.another”你会使用:
a = Resolve(myobject, 'id.number.another')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.