2012-01-29 7 views
3

これはプロパティがあるかどうかを確認する唯一の方法ですか?同じことをする他の方法はありますか?pythonに属性があるかどうかを調べる代替手段はありますか?

+0

は何

また、このトピックの詳細については、これらの関連の質問を見てみたいことがあり'hasattr'で間違っていますか? – yak

+1

dup? http://stackoverflow.com/questions/610883/how-to-know-if-an-object-has-an-attribute-in-python – danihp

答えて

5

まあ、それにアクセスしようとすると、それが存在しない場合はAttributeErrorをキャッチすることができます。

try: 
    a.foo 
except AttributeError: 
    ... 
+0

私は多くのマルチスレッドコードで作業していませんが、これを処理するためのスレッドセーフな唯一の方法でもあります。あれは正しいですか?つまり、別のスレッドが 'hasattr(a、 'foo')'と 'a.foo'の呼び出しの間に' a.foo'を削除する可能性がありますが、これはアトミックになります。 –

+0

ありがとうCat Plus Plus。 – shibly

8

あなただけのプロパティを使用して、それが存在しない場合AttributeError例外をキャッチすることができます。しかし、hasattrを使用することも合理的なアプローチです。

例外をキャッチして潜在的な問題は、あなたが簡単に起因するかもしれない(コードがAttributeErrorを提起する属性が存在しない、そしてそれは、既存のが、あなたはそれを呼び出す際にいくつかのコードが実行されるとを区別することができないということですコード内のバグ)。あなたはまた、使用することができ

1

if 'property' in a.__dict__: 
    a.property 
関連する問題