2010-08-25 20 views
9

所以我有一個模塊中的類有一些靜態方法。這些靜態方法中的一些只是做crc檢查和其他東西,而且它們在類之外並沒有什麼用處(我只是將它們變成了java或C++中的私有靜態方法)。我想知道是否應該讓他們成爲全球班級職能(班外)。python中的靜態方法vs模塊函數

這樣做有什麼好處嗎?該課程正在通過from module import class導入,所以我並不擔心將這些模塊也拉入其中。但是,我應該讓他們的課程方法,以便from module import *更安全嗎?

回答

7

使用單個下劃線前綴固定的函數名稱是一種慣例,表示它們是私有的,並且也會阻止它們通過from module import *導入。

另一種方法是在模塊中指定一個__all__名單 - 這可以只是模塊本身中完成(你不需要一個__init__.py文件)

__all__ = ['my_class_name'] 

這更是一個白名單的辦法,所以你可以完全控制導入下劃線的內容。

因此,除非您的方法在邏輯上屬於類,並且您的描述不屬於這些類,否則我將它們作爲模塊級函數,並使用這兩種方法之一使它們變爲私有。

+0

我不知道'__all__'。謝謝=] – Falmarri 2010-08-26 18:07:09

3

使它們成爲模塊級函數,並在它們前面加上一個下劃線,以便消費者明白它們是供私人使用的。

3

如果它們在課堂外沒有用處,那麼使它們成爲模塊方法的動機是什麼?將它們保持爲靜態方法會使名稱空間更清潔。

把它移到外面的唯一好處可能是讓人們可以引用它們而不用限定它們的類名。假設你有一個日誌方法可以在很多地方獲得參考,這可能是一種文體選擇。