2016-11-25 21 views
4

我發現自己不確定是否應該將我在我的類中使用的某些變量設置爲私有類變量(例如_var)與類常量變量(例如VAR)相比私有類常量變量,如果這樣的話使用(例如_VAR)。我意識到除了約定之外,這在Python中並不重要,但是想知道哪種方式是正確的(或者更正確)。當變量應該設置爲私有類變量(例如_var)與類常量(例如VAR)相比私有類常量(例如_VAR)時?

例如,假設我有一個用於存儲高度正則表達式的特定變量。假設我無意在課程中的任何地方或代碼中的其他地方修改此代碼,實際上我只在其中一個類方法中使用它,我應該使用它:

選項1 - 設置爲私有類變量:

_height_pattern = r"""(#'##?"?)|#'""" 

選擇2 - 設置爲常數類變量

HEIGHT_PATTERN = r"""(#'##?"?)|#'""" 

選擇3 - 設置爲常數私有類變量(不知道這樣的事情存在,或者如果我有生以來看到這個變量聲明)

_HEIGHT_PATTERN = r"""(#'##?"?)|#'""" 

或者還有一些其他的選擇,我沒有想到。請注意,在這種情況下,我選擇了一個變量,我認爲人們可以通過這種方式或另一種方式做出正確的判斷。不過,也有其他一些我覺得它會更模糊的例子。例如,如果我有一個隨機種子變量(_SEED = 2000?),它的變化不會對功能產生根本影響?因此,如果你可以分享一些容易遵循的經驗法則,那也是值得讚賞的。

回答

1

事實上,我只在類的方法

一個使用它那麼毫無疑問,這不應該是一個類變量在所有。我會在方法中聲明它作爲常量。

但是,我知道您的問題比您給出的這個單例更寬泛一些,所以我們假設您所說的這個變量將用於多種方法。在這種情況下,我也從來沒有見過類似選項3(和地獄它是醜陋的),你應該選擇2,因爲它更重要的是你的代碼說這個變量是而不是被修改比告訴它不應該在課堂外訪問。

+0

如果有什麼變化所花的時間一點點計算 - 例如,依靠str.maketrans,和雖然它僅用於1類方法,但是該類方法被多次重複調用(它應用於大數據集中的每一行),是否應該堅持將它作爲類變量來保存累積的處理時間? – blu

+0

不確定'str.maketrans'會是一個很好的例子,因爲將'maketrans'應用於腳本初始化的值可能不是一個好主意,因爲它的返回值可能在每次調用時都會有所不同(否則它不會有意義使用它而不是使用我認爲的最終值)。不過,如果是這樣的話,我會說我的答案的最後一段適用。 – lucasnadalutti

0

根據pep-0008常數應該是所有captialized,並在需要時使用下劃線。示例HEIGHT_PATTERN

由於從更一般的編碼「風格」的蟒蛇可以在PEP 8中找到(見上面的鏈接)