我有两节课。一个类具有属性x
但不具有y
,而另一个类具有属性y
但不具有x
。
我有一个接受任一类作为参数的函数。是否有单行方式将新变量分配给x
属性(如果存在),或y
属性(如果不存在)?即,
if hasattr(input_object, 'x'):
new_var = input_object.x
else:
new_var = input_object.y
我以为我能做到:
new_var = getattr(input_object, 'x', input_object.y)
但如果AttributeError
没有input_object
,即使它有y
,也会引发x
。
答案 0 :(得分:3)
您也可以getattr
使用y
。
new_var = getattr(input_object, 'x', None) or getattr(input_object, 'y', None)
答案 1 :(得分:3)
或者您可以使用if / else结构:
new_var = (
input_object.x if hasattr(input_object, 'x')
else input_object.y
)
除非没有,否则不会评估input_object.y
input_object.x
。
答案 2 :(得分:0)
像这样嵌套 getattr 调用:
getattr(model, "field1", getattr(model, "field2", None))