Проверьте множественные hasattr в том же состоянии

if hasattr(form, 'name') and hasattr(form, 'date'):
   print(form.name) #'Some name' - True
   print(form.date) #none - False

Это условие подтверждается как True, даже если hasattr(form, 'date') ложно

Как правильно проверить мультипликаторы? hasattr?

6 ответов

Ты можешь использовать all

if all(hasattr(form, attr) for attr in ["name", "date"])

То, что вы ищете, вероятно, нет hasattr, но getattr,

if getattr(form, 'name') and getattr(form, 'date'):

Как hasattr проверим, если form имеет атрибут name, Это проверит, если form.name существует, не получая значение form.name, А также getattr есть для этого!

Надеюсь это поможет!

Если у вас есть более одного значения, чтобы проверить, является ли он истинным атрибутом объекта, вы можете сделать это следующим образом

if all(getattr(form, attrib) for attrib in ["name", "date"]):
    ....

Даже если значение атрибута False, он по-прежнему имеет атрибут, поэтому он не дает сбоев (как вы ожидаете).

hasattr будет только проверять, существует ли атрибут, а не его значение. Тебе нужно getattr,

Попробуйте использовать getattr:

if getattr(form, 'name', None) and getattr(form, 'date', None):
    print(name)
    print(date)

getattr (form, 'name', None) - это None является значением по умолчанию, если не поле

Ваше состояние в порядке. Ваше использование переменных ниже, вероятно, нет - я думаю, что вы хотите использовать form.name а также form.date,

Если вы хотите проверить, существуют ли они и что их значение не None, попробуйте:

if getattr(form, 'name') is not None and getattr(form, 'date') is not None:
    print(form.name)
    print(form.date)
Другие вопросы по тегам