Страницы

Поиск по вопросам

четверг, 9 января 2020 г.

Как еще можно задать default-значение переменной кроме try-except?

#python #python_3x #атрибуты


Объект obj - это инстанс какой-то джанго-модели. Допустим, у него есть поле prop,
которое по идее должно быть связано с другой моделью, но может также быть None. Моя
задача - записать в переменную var поле target второй связанной модели.

var = obj.prop.target


Если поле prop окажется равно None, то все сломается, так как у None нет поля target.
В этом случае я хочу записать в переменную var значение None. В принципе я могу это
сделать так

try:
    var = obj.prop.target
except AttributeError:
    var = None


Нет ли какого-нибудь другого способа это сделать, наподобие setdefault у  словарей? 
    


Ответы

Ответ 1



Воспользуйтесь встроенной функцией getattr(object, name[, default]): var = getattr(obj.prop, "target", None) Выдержка из документации: getattr(object, name[, default]) Return the value of the named attribute of object. name must be a string. If the string is the name of one of the object’s attributes, the result is the value of that attribute. For example, getattr(x, 'foobar') is equivalent to x.foobar. If the named attribute does not exist, default is returned if provided, otherwise AttributeError is raised.

Комментариев нет:

Отправить комментарий