PYTHON小白 第十四天

2021-10-02 01:21:03 字數 1585 閱讀 3592

python小白:第十四天

1、 方法

方法是類或物件的行為特徵的抽象,但python方法其實也是函式,其定義方式、呼叫方式和函式都非常相似,因此python方法並不僅僅是單純的方法,它與函式也有莫大的關係。

1.1 類也能呼叫例項方法

python的類在很大程度上是乙個命名空間–當程式在類體中定義變數、定義方法時,與前面介紹的定義變數、定義函式其實並沒有太大的不同。

程式在呼叫bird空間內的bar變數和foo()函式(方法)時,只要添bird.字首即可,這說明完全可以通過bird類來呼叫foo()函式(方法)。這就是類呼叫例項方法的證明。

現在問題來了,如果使用類呼叫例項方法,那麼該方法的第乙個引數(self)怎麼自動繫結呢?

請看程式中粗體字**,呼叫walk()方法缺少傳入的self引數,所以導致程式出錯。這說明在使用類呼叫例項方法時,python不會自動為第乙個引數繫結呼叫者。實際上也沒法自動繫結,因此例項方法的呼叫者是類本身,而不是物件。

如果程式依然希望使用類來呼叫例項方法,則必須手動為方法的第一引數傳入引數值。

實際上,當通過user類呼叫walk()例項方法時,python只要求手動為第乙個引數繫結引數值,並不要求必須繫結user物件。

python的類可以呼叫例項方法,但使用類呼叫例項方法時,python不會自動為方法的第乙個引數self繫結引數值;程式必須顯式地為第乙個引數self繫結引數值,這種呼叫方式被稱為「未繫結方法」。

1.2 類方法與靜態方法

python完全支援定義類方法,甚至支援定義靜態方法。python的類方法和靜態方法很相似,它們都推薦使用類來呼叫(其實也可使用物件來呼叫)。類方法和靜態方法的區別在於python會自動繫結類方法的第乙個引數,類方法的第乙個引數(通常建議引數名為cls)會自動繫結到類本身:但對於靜態方法則不會自動繫結。

使用@classmethod修飾的方法就是類方法:使用@staticmethod修飾的方法就是靜態方法。

1.3 @函式裝飾器

使用@符號引用己有的函式(比如@staticmethod、@classmethod)後,可用於修飾其他函式,裝飾被修飾的函式。

當程式使用「@函式」(比如函式a)裝飾另乙個函式(比如函式b)時,實際上完成如下兩步。

a) 將被修飾的函式(函式b)作為引數傳給@符號引用的函式(函式a)。

b) 將函式b替換(裝飾)成第一步的返回值。

上面程式使用@funa修飾funb,這意味著程式要完成兩步操作。

a) 將funb作為funa()的引數,也就是上面的粗體字**相當於執行funa(funb)。

b) funb替換成第一步執行的結果,funa()執行完成後返回fkit,因此funb就不再是函式,而是被替換成乙個字串。

被修飾的函式總是被替換成@符號所引用的函式的返回值,因此被修飾的函式會變成什麼,完全由於@符號所引用的函式的返回值決定–如果@符號所引用的函式的返回值是函式,那麼被修飾的函式在替換之後還是函式。

通過@符號來修飾函式是python乙個非常實用的功能,它既可以在被修飾函式的前面新增一些額外的處理邏輯(比如許可權檢查),也可以在被修飾函式的後面新增-些額外的處理邏輯(如記錄日誌),還可以在目標方法丟擲異常時進行一些修復操作……這種改變不需要修改被修飾函式的**,只要增加乙個修飾即可。

Python 第十四天

物件導向程式設計 object oriented programming,簡稱 oop 是一種封裝 的方法。封裝,其實就是隱藏實現功能的具體 僅留給使用者使用的介面,就好像使用計算機,使用者只需要使用鍵盤 滑鼠就可以實現一些功能,而根本不需要知道其內部是如何工作的。python 中,建立乙個類使用c...

python學習 第十四天

在下這廂有禮了 python正規表示式 python通過re模組提供對正規表示式的支援。使用re的一般步驟是先將正規表示式的字串形式編譯為pattern例項,然後使用pattern例項處理文字並獲得匹配結果 乙個match例項 最後使match例項獲得資訊,進行其他的操作。encoding utf ...

學習python 第十四天

python 傳送電子郵件 訪問 http協議,傳送郵件要使用smtp。smtp mail transfer protocol 即簡單郵件傳輸協議,它是一組用於由源位址到目的位址傳送郵件的規則,由它來控制信件的中轉方式。python的smtplib提供了一種很方便的途徑傳送電子郵件。它對smtp協議...