2012-01-29 31 views
3
a = SomeClass() 
if hasattr(a, 'property'): 
     a.property 

這是唯一的方法來檢查是否有財產或沒有?有沒有其他的方式來做同樣的事情?任何替代方法來檢查是否有任何python屬性?

+0

什麼'hasattr'錯誤? – yak 2012-01-29 22:25:41

+1

dup? http://stackoverflow.com/questions/610883/how-to-know-if-an-object-has-an-attribute-in-python – danihp 2012-01-29 22:27:11

回答

5

那麼,你可以嘗試訪問它,並捕獲AttributeError,如果它不存在。

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

我一直沒有太多的多線程代碼,但它似乎是這樣也是處理這個問題的唯一線程安全方式。那是對的嗎?我的意思是,似乎另一個線程可能會在'hasattr(a,'foo')'和'a.foo'之間的某個時間刪除'a.foo',而這將是原子性的。 – 2012-01-29 22:27:25

+0

謝謝Cat Plus Plus。 – shibly 2012-01-29 22:43:45

8

你可以只使用屬性和捕捉AttributeError異常,如果它不存在。但使用hasattr也是一種合理的方法。

與捕捉異常的潛在問題是,你不能輕易的屬性不存在,它存在的,但是當你把它運行一些代碼,之間由於區分代碼引發AttributeError(也許代碼中的錯誤)。

你可能也想看看這些相關的問題有關此主題的更多信息:

1

您還可以使用:

if 'property' in a.__dict__: 
    a.property 
相關問題