2014-02-05 31 views
5

我在想,是否推薦/ Pythonic在Python腳本中定義和使用自定義雙下劃線變量/函數?例如,在SQLAlchemy中使用的__tablename____validateitem__()(在應用__setitem__()之前驗證項目的自定義函數)。如果它確實定義了魔術發生了,或者確實以特殊的方式使用了特定的變量/函數(比如上面的兩個例子),我覺得使用它們是個好主意。如何推薦在Python中使用自定義雙下劃線變量?

我對使用這種命名的最佳編碼實踐和潛在風險的爭論感興趣。

回答

4

從PEP8:

__double_leading_and_trailing_underscore__: 「神奇」 的對象,或者住在用戶控制的命名空間的屬性。例如。 __init____import____file__。不要發明這樣的名字;只有按照記錄使用它們。

所以,建議是不要爲自己的變量使用雙下劃線語法。

+0

這是因爲它會誤導用戶認爲它是一個標準的定義名稱嗎?還是這是因爲它意味着未來的發展,任何時候都可以在標準庫中實現具有該名稱的變量?在某些情況下,這些名字是用來強調這些名稱的,這就是「魔術」。 – linkyndy

+1

用戶定義__是私人標記。由於python被解釋,沒有真正的私人var /方法。只使用一個下劃線標記你的變量是「小心」。__vars的訪問速度比平常慢,所以你沒有理由使用它。 – cox

+0

什麼支持程序員不應該創造這樣一個名字的解釋?我的問題是,程序員在這裏爲程序員寫apis。哪一個是你自己的程序員? – n611x007