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

この条件は、hasattr(form, 'date')が false であっても True として検証されます。

複数を検証する正しい方法は何ですかhasattr?

4

6 に答える 6

16

使用できますall

if all(hasattr(form, attr) for attr in ["name", "date"])
于 2013-12-12T12:21:41.163 に答える
2

あなたが探しているのはおそらくではありませんhasattrが、getattr.

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

属性があるhasattrかどうかを確認formしますnameform.nameの値を取得せずに、存在するかどうかを確認しますform.name。そしてgetattr、そのためにあります!

お役に立てれば!

于 2013-12-12T12:22:08.117 に答える
1

属性のFalseが であっても、まだ属性を持っているため、(予想どおり) 失敗していません。

hasattr値が何であるかではなく、属性が存在するかどうかのみをチェックします。が必要getattrです。

于 2013-12-12T12:22:03.200 に答える
0

オブジェクトの真の属性であるかどうかを確認する値が複数ある場合は、次のようにすることができます

if all(getattr(form, attrib) for attrib in ["name", "date"]):
    ....
于 2013-12-12T12:20:58.307 に答える
0

getattr を使用してみてください:

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

getattr(form, 'name', None) - フィールドでない場合、この None がデフォルト値です

于 2013-12-12T12:22:40.900 に答える
0

あなたの状態は大丈夫です。以下の変数の使用はおそらくそうではありません.andを使用するつもりだと思い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)
于 2013-12-12T12:23:03.553 に答える