日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

回顧

在Python進階記錄之基礎篇(十九)中,我們介紹了Python面向對象中對于@property裝飾器和__slots__魔法的相關知識點,需要重點理解它們的意義并掌握它們的基本用法。今天我們講一下Python面向對象中的類方法和靜態方法,以及類中擁有特殊功能的魔法函數。

類方法

在我們前面介紹的面向對象相關內容中,我們在類中定義的方法都是對象方法,即提供給對象的方法。我們在使用時需要先創建對象,再通過對象調用這些成員方法。但在實際開發中,我們有時并不需要把方法都寫成對象方法。

假設現在我們要定義一個“三角形”類,通過傳入三條邊長來構造三角形,并提供計算周長。

Python類方法和靜態方法、魔法函數

三角形類

“三角形”類有三個私有變量代表三角形的三條邊長,同時提供一個對象方法來計算周長。但是,我們知道,構成三角形是有條件的。因此,我們需要一個方法來驗證三條邊長是否可以構成三角形。你可以將這個方法定義成對象方法,然后創建對象后去驗證是否構成三角形。

但是,如果我們在不知道三條邊能不能構成三角形的情況下就創建三角形對象,很顯然不是很恰當。所以這個方法,我們需要定義成類方法,即屬于三角形類,而不是三角形對象的。

Python類方法和靜態方法、魔法函數

類方法

類方法使用@classmethod裝飾器修飾,第一個參數約定為cls,它代表的是當前類相關信息的對象,通過這個參數我們可以獲取和類相關的信息并創建類的對象。

上述代碼中,我們定義了類方法is_Triangle( )判斷三條邊能否構成三角形,若能構成,則利用cls參數創建對象并將生成的對象作為返回結果;若不能構成,則返回False。

靜態方法

當方法中我們既不需要使用實例對象,也不需要使用類對象時,我們就可以將該方法定義成靜態方法。例如,在上述“三角形”類中,我們需要一個介紹三角形定義的方法,顯然,這個方法即不依賴于實例對象,也不依賴于類對象,因此,我們可以將它定義成靜態方法。

Python類方法和靜態方法、魔法函數

靜態方法

靜態方法通過@staticmethod裝飾器修飾,靜態方法既不需要傳遞類對象也不需要傳遞實例對象,即不需要self或cls參數。靜態方法同時支持實例對象或類對象調用。

魔法函數

在上一次內容中,我們講到了__slots__魔法,可以限定類的屬性。事實上,Python的類中還有許多形如__xxx__這種具有特殊用途的函數。

  • __str__

我們先定義一個簡單的類,然后創建對象,并打印這個對象。

Python類方法和靜態方法、魔法函數

打印對象

可以看到,當我們打印對象時,結果很不友好。這時,我們就可以使用__str__魔法函數來定制打印內容。

Python類方法和靜態方法、魔法函數

__str__魔法函數

類中定義了__str__魔法函數后,再打印對象時,Python就會走__str__魔法函數,打印出我們定制的內容。上述代碼中,我們在__str__( )下加了一行代碼:__repr__ = __str__,這是因為在命令行下,如果去掉print,調用的就不是__str__( )了,而是__repr__( )。

兩者的區別是__str__( )返回用戶看到的字符串,而__repr__( )返回程序開發者看到的字符串,也就是說,__repr__( )是為開發者調試服務的。因此,如果你覺得__repr__( )作用不大,你也可以去掉這行代碼。

  • __getattr__

正常情況下,當我們直接訪問類定義時不存在的屬性或方法時,Python是會報錯的。例如,我們定義一個Person類。

Python類方法和靜態方法、魔法函數

直接訪問類中不存在的屬性或方法

可以看到,我們可以直接訪問name屬性,但當訪問Person類中沒有定義的屬性age時,Python就報錯了。當然,我們可以在訪問age前通過動態添加屬性的方式給對象添加age屬性。但如果要規避這種直接訪問帶來的錯誤,我們可以使用__getattr__魔法函數來校驗調用是否合法。

Python類方法和靜態方法、魔法函數

__getattr__魔法函數

上述代碼中,我們給Person類增加了__getattr__魔法函數,此時再調用Person類中未定義的屬性age時就不會報錯了,而是直接返回None。__getattr__魔法函數同時支持屬性和方法的校驗,并且attr參數能獲取到當前調用的參數名或方法名,從而做一些定制化的事情。例如,可以針對某屬性或某方法做特殊處理,一旦有對象調用這個屬性或方法,就做特殊處理。

總結

以上內容介紹了Python面向對象中類方法和靜態方法的相關內容以及幾個常用的魔法函數,需要重點掌握類方法和靜態方法的概念和基本用法,理解魔法函數的作用并能熟練使用常用的魔法函數來定制類。感謝大家的支持與關注,歡迎一起學習交流~
 

分享到:
標簽:Python
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定