[英]What is a good way to order methods in a Python class?
正如其他人所指出的,沒有正確的方法來訂購你的方法。 也許PEP建議會有用,但無論如何。 讓我盡量客觀地處理你的問題。
接口首先:公共方法和Python魔術函數定義類的接口。 大多數情況下,您和其他開發人員希望使用類而不是更改它。 因此,他們會對該類的界面感興趣。 將它放在源代碼中的第一位可以避免滾動瀏覽您不關心的實現細節。
屬性, 魔術方法 ,公共方法:很難定義這三者之間的最佳順序,這三者都是類接口的一部分。 正如@EthanFurman所說,堅持整個項目的一個系統是最重要的。 一般來說,人們期望__init__()
成為班級中最好的第一個函數,所以我會跟進下面的其他魔術方法。
閱讀順序:基本上,有兩種方式來講述一個故事:自下而上或自上而下。 通過首先放置高級函數,開發人員可以通過閱讀前幾行來粗略地理解類。 否則,人們必須閱讀整個課程才能理解課程,大多數開發人員沒有時間。 根據經驗,將方法置於從其身體調用的所有方法之上。
類方法和靜態方法:通常,這是上面解釋的閱讀順序所暗示的。 普通方法可以調用所有方法次數,因此可以先行。 類方法只能調用類方法和靜態方法,接下來。 靜態方法不能調用類的其他方法並且最后。
希望這可以幫助。 這些規則中的大多數都不是特定於Python的。 我不知道一種語言強制執行方法順序,但如果是這樣,那將非常有趣,請注釋。
沒有一個正確的訂單。 選擇一個系統並堅持下去。 我使用的是:
class SomeClass(object):
def __magic_methods__(self):
"magic methods first, usually in alphabetical order"
def _private_method(self):
"worker methods next, also in alpha order"
def a_method(self):
"then normal methods, also in alpha order"
我做了一些類似於@Ethan的事情,我在Django的源代碼中看到,主要的區別是大的“############”阻止區域划分的注釋。 例如,
class SomeClass(object):
#################
# Magic Methods #
#################
def __magic_methods__(self):
"magic methods first"
##################
# Public Methods #
##################
def a_method(self):
"then normal methods, in order of importance"
###################
# Private Methods #
###################
def _private_method(self):
"then worker methods, grouped by importance or related function"
顯然,這對較小的類來說不太有用。
代碼
class Foo(_Foo):
pass
class _Foo:
pass
引發異常,因為在使用類_Foo
之前必須對其進行定義。
這就是為什么通常在公共類之前定義私有類是有意義的。 這就是為什么保持一致性並在公共方法和函數之前定義私有方法和函數是有意義的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.