Python getattr()使用另一个属性作为默认值

时间:2015-07-16 01:34:46

标签: python object getattr

我有两节课。一个类具有属性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

3 个答案:

答案 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))