2011-12-04 12 views
1

由於某些原因,儘管Python的「明確」指導方針,很多類型都可以隱式轉換爲布爾值。無論如何...隱含地把班級轉換成布爾型是否是一種慣用的方式?

在適當的情況下,自定義類還可以隱式轉換爲bool嗎?如果是,我應該重新定義什麼函數?在我的具體情況下,我有一個Image類;我想將它轉換爲bool,以便它在從某處(文件)加載數據時爲True,否則爲False

回答

3

This can be idiematic;例如,容器對象在空時應該測試錯誤。您應該在Python 3中定義__nonzero__,並在Python 3中定義__bool__來進行轉換。在編寫針對Python 2和3的代碼時,定義兩者。

但是,按照「明確優於隱含」的指導方針,您可能反而只想說if img.is_loaded():__nonzero__/__bool__存在的主要原因是容器,這反映在Python數據模型中的描述中:「如果未定義此方法,則調用__len__(),如果已定義該方法,並且如果該對象的結果爲真非零「。所以這是len(obj) == 0的簡寫,也許是用更快的檢查來實現的。

相關問題