35

我知道從不使用內置函數名稱作爲變量標識符。使用內置函數名稱作爲屬性或方法標識符是不好的做法嗎?

但是有什麼理由不把它們用作屬性或方法標識符嗎?

例如,編寫my_object.id = 5或在我自己的類中定義實例方法dict是否安全?

+1

相關:['id'是Python中的錯誤變量名稱](http://stackoverflow.com/q/77552/95735) – 2012-02-02 13:41:26

回答

29

它不會混淆解釋器,但它可能會讓人們讀取你的代碼時感到困惑。應該避免爲屬性和方法不必要地使用內建名稱。

另一個不好的結果是shadowing builtins會在大多數python感知編輯器(vi,emacs,pydev,idle等)中混淆語法輪廓筆。另外,一些lint工具會警告這種做法。

13

不,這很好。由於需要對象引用,因此無法讓它們隱藏內置對象。

+1

所以我可以使用任何有效的標識符作爲屬性名稱,除了以' __',還是與關鍵字相同的一個? – max 2012-02-02 08:50:00

+0

你可以使用任何包括__something或關鍵字。那麼,一些與__有特殊的意義。 – 2012-02-02 08:51:23

+0

只要他們用'__'結尾,你也可以用'__'開頭。請注意,儘管Python爲了自己的目的使用了許多這樣的方法(比如'__dict__','__init__'和'__new__')。 – 2012-02-02 08:52:31

15

是的,這是不好的做法。它可能不會立即爲你破壞任何東西,但它仍然會影響代碼的可讀性。

,選擇性地從PEP20引用:

美麗的比醜好。
簡單勝過複雜。
可讀性計數。
如果實施難以解釋,這是一個壞主意。

眼看myobject.dict()調用它會自然地認爲它會返回myobject.__dict__,或myobject.id()回報同樣的事情id(myobject)

這有可能讓他們發現,他們錯了;但這需要花費時間和精力,並且在弄明白的時候可能會導致一些錯誤。打電話給你的屬性myobject.object_id_number要長得多,但更清楚它不同於id(myobject)

相關問題