我最近開始使用PyCharm,它告訴我什麼時候我的一個方法可以是靜態的(每當我不使用任何成員時)。Python靜態或不靜態
我想知道是否是一個很好的做法,只要我可以或不可以使方法變爲靜態。我知道在其他(編譯)語言中這是一個壞習慣,但它認爲對於Python來說它實際上會更輕。通常,PyCharm提出的這些修正是由PEP編號支持的,但這個修改沒有。
TL; DR 即使我不需要靜態使用它們,我是否應該將靜態方法聲明爲靜態方法?
我最近開始使用PyCharm,它告訴我什麼時候我的一個方法可以是靜態的(每當我不使用任何成員時)。Python靜態或不靜態
我想知道是否是一個很好的做法,只要我可以或不可以使方法變爲靜態。我知道在其他(編譯)語言中這是一個壞習慣,但它認爲對於Python來說它實際上會更輕。通常,PyCharm提出的這些修正是由PEP編號支持的,但這個修改沒有。
TL; DR 即使我不需要靜態使用它們,我是否應該將靜態方法聲明爲靜態方法?
如果一個方法,一個類的函數屬性不能使用第一個參數,一個類的實例,就可以聲明爲static。用一個未使用的參數定義一個函數/ bug通常是一個壞主意。如果缺乏使用是一個錯誤,因爲應該使用參數,那麼應該修復它。如果缺乏使用不是一個bug,那麼(一般來說),參數應該從標題中刪除。
如果不使用不是bug,PyCharm應該建議如何從類中移除該函數,並從定義中移除未使用的self參數,以便可以在不需要不相關的類實例的情況下調用該函數。 Python不是Java。 Python使用模塊而不是類作爲默認的函數容器。例如:
def C:
def fmeth(self, x):
def ffunc(x):
return x * 3 + 2
print(C().fmeth(0), ffunc(0)
除了在一些特殊情況下,沒有被要求的功能通過C實例來訪問獲得。
Python stdlib幾乎不使用staticmethod()
。除了測試以外,只有大約20次使用,我檢查過的可以看作是特殊情況。 Guido van Rossum曾表示,staticmethod
以及classmethod
的增加值得懷疑,因此不應該使用太多。
很好,謝謝。模塊中我沒有足夠的思考。我只是將它移到課程外面,然後避免導入它。 – lagagne
我建議專注於概念模型而不是代碼做出這個決定。操作在概念上是針對單個對象實例的(即使不需要像當前實現的那樣與該實例進行交互),或者與您正在使用的類表示的對象類型通用的操作。或者,該操作是否可用於可能無法訪問課程實例的代碼?從PyCharm處理此消息是爲了提醒您思考您的概念模型,而不是提供具體結果的建議。 –
這似乎是一個偏好問題。至少對於我來說。 – Dschoni
......順便說一句,「在其他(編譯)語言中的壞習慣」是...我不同意的是絕對是真的。 –