在相同条件下检查倍数hasattr

时间:2013-12-12 12:18:45

标签: python hasattr

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

即使hasattr(form, 'date')为假,此条件也会验证为True。

验证倍数hasattr?

的正确方法是什么

6 个答案:

答案 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.nameform.date

如果您想检查它们的值是否存在,它们的值不是None,请尝试:

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