if hasattr(form, 'name') and hasattr(form, 'date'):
print(form.name) #'Some name' - True
print(form.date) #none - False
即使hasattr(form, 'date')
为假,此条件也会验证为True。
验证倍数hasattr?
答案 0 :(得分:9)
您可以使用all
if all(hasattr(form, attr) for attr in ["name", "date"])
答案 1 :(得分:2)
您所看到的内容可能不是hasattr
,而是getattr
。
if getattr(form, 'name') and getattr(form, 'date'):
由于hasattr
会检查form
是否具有属性name
。它会检查form.name
是否存在,而不是form.name
的值。 getattr
就是为了那个!
希望这有帮助!
答案 2 :(得分:1)
即使属性的值为False
,它仍然具有属性,这就是它没有失败的原因(正如您所希望的那样) )。
hasattr
只会检查属性是否存在,而不是它的值是什么。您需要getattr
。
答案 3 :(得分:0)
如果您有多个值来检查它是否是对象的truthy属性,您可以这样做
if all(getattr(form, attrib) for attrib in ["name", "date"]):
....
答案 4 :(得分:0)
尝试使用getattr:
if getattr(form, 'name', None) and getattr(form, 'date', None):
print(name)
print(date)
getattr(form,'name',None) - 此None是默认值,如果不是字段
答案 5 :(得分:0)
你的病情很好。您对以下变量的使用可能不是 - 我认为您的意思是使用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)