2012-10-08 31 views
4

我編寫了一個python程序,使用的多個實例包含語法來查看字典和列表。__contains__語法

if not test_map[var].__contains__(string): 

看來,我會的得到更好的使用方法:

if string not in test_map[var]: 

有誰知道可以使用__contains__方法會出現問題?

謝謝,

+0

請參閱http://stackoverflow.com/questions/1022499/emulating-membership-test-in-python-delegating-contains-to-contained-object#1022505 – 2012-10-08 11:39:59

回答

12

這是非常非常醜陋。

如果未來語義發生變化,直接使用實現而不是使用實際的預期頂級語法也會傷害到你。另外,它使得代碼難以理解和解釋。

很有可能在不知道in使用__contains__()的情況下成爲一名稱職的Python程序員。我認爲相反的是不正確的。

+0

好酷,所以沒有使用此問題的主要問題... – felix001

+0

而且一般契約是__之前/之後的方法和函數是「private」,並且可以在沒有通知的情況下更改 – svrist

+1

_and_之前的下劃線表示不穩定的「專用」接口的註釋不準確。代表「神奇」方法即核心協議之前和之後的雙倍。這些往往非常穩定。之前(但不是之後)的單個下劃線代表軟性「保護」屬性,並且在雙重下劃線之前(但不是之後)執行「名稱集中」以標記爲軟 - 「私人」。我對這兩種方式都表示軟性,因爲Python不強制執行這種用法,這只是慣例。 – amcgregor