對於初學者如何理解 @classmethod 和@staticmethod
staticmethod相當於一個定義在類別裡面的函數,所以如果一個方法既不跟實例相關也不跟特定的類別相關,推薦將其定義為一個staticmethod,這樣不僅使程式碼一目了然,而且似的利於維護代碼。
子類呼叫方法隱形傳入的參數為該物件所對應的類,呼叫過程中動態產生了對應的類別的類變數。
理解classicmethod和staticmethod類別是一種資料結構,可以建立物件。當呼叫類別的時候就創建了一個類別的實例物件。一旦物件被創建,python 就會檢查是否實作了init()方法。如果init()已經實現,那麼它將被調用,實例物件作為第一個參數(self)被傳遞進去。
舉個例子,定義一個儲存日期資訊的類別Date,這裡重新定義了初始化函數。
class Date(object): day = 0 month = 0 year = 0 def __init__(self, day=0, month=0, year=0): self.day = day self.month = month self.year = year def tellDate(self): print 'Today is %s-%s-%s'%(self.day,self.month,self.year)
如果我們需要呼叫tell Date方法,我們就必須先建立一個實例,或是使用Date().tellDate()
date1 = Date() date1.tellDate()
如何直接使用類別名稱呼叫函數呢?
使用@classmethod或@staticmethod都可以類別名稱.方法名()呼叫函數
現在假設我們需要創建很多Date的實例,日期資訊以字串的形式從外部傳入,格式為'dd-mm-yyyy'。需要做的事
將日期資訊字串parse成一個含有年月日三個變數的元組;
實例化一個Date物件時就將年月日作為參數傳入。
就像這樣:
day, month, year = map(int, string_date.split('-')) date1 = Date(day, month, year)
python不能像C 那樣進行重載,所以我們引入class method ,它不需要self參數,但需要第一個參數是表示自身類別的cls參數。
@classmethod def from_string(cls, date_as_string): day, month, year = map(int, date_as_string.split('-')) date1 = cls(day, month, year) return date1
使用時可以直接類別名稱.方法名稱()
這樣程式設計的好處有:
分解字串運算可以重複使用,而我們只需要傳入參數一次;
OOP;
cos是類別本身,而不是類別的實例,當我們將Date當作父類別時,其子類別也會擁有from_string方法
#和class method很相似的是staticmethod,但它不需要表示自身物件的self和自身類別的cls參數,就跟使用函數一樣。
@staticmethod def is_date_valid(date_as_string): day, month, year = map(int, date_as_string.split('-')) return day <= 31 and month <= 12 and year <= 3999
所有程式及執行結果
class Date(object): day = 0 month = 0 year = 0 def __init__(self, day=0, month=0, year=0): self.day = day self.month = month self.year = year def tellDate(self): print 'Today is %s-%s-%s'%(self.day,self.month,self.year) @classmethod def from_string(cls, date_as_string): day, month, year = map(int, date_as_string.split('-')) date = cls(day, month, year) return date @staticmethod def is_date_valid(date_as_string): day, month, year = map(int, date_as_string.split('-')) return day <= 31 and month <= 12 and year <= 3999 if __name__ == '__main__': date1 = Date() date1.tellDate() date2 = Date.from_string("14-04-2016") date2.tellDate() print Date.is_date_valid("14-04-2016")
運行結果為:
Today is 0-0-0 Today is 14-4-2016 True
以上是對於初學者如何理解 @classmethod 和@staticmethod的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

在 Sublime Text 中運行 Python 代碼,需先安裝 Python 插件,再創建 .py 文件並編寫代碼,最後按 Ctrl B 運行代碼,輸出會在控制台中顯示。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

Golang在性能和可擴展性方面優於Python。 1)Golang的編譯型特性和高效並發模型使其在高並發場景下表現出色。 2)Python作為解釋型語言,執行速度較慢,但通過工具如Cython可優化性能。

在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。

在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。
