第8 1節 Python類的構造方法 init

2021-09-24 17:15:25 字數 1295 閱讀 8854

一、    引言

凡是物件導向設計的語言,在類例項化時都有構造方法,很多語言的構造方法名與類名一致,python中類的構造方法比較特殊,必須是__init__特殊方法。

二、    語法釋義

1.    語法:__init__(self,*args,**kwargs)

其中:1)    self為建立的例項,由python自動傳入。

各位看官注意:

1>關於self在此不進行詳細介紹,如果需要了解請參考本博《第7.5節 揭開python類中self的面紗》。這裡self表示例項自身,從這裡可以看出,呼叫構造方法時,例項已經存在了;

2)    args為例項建立時傳入的非關鍵字引數,打包成元組tuple給函式體呼叫;

3)    kwargs為例項建立時傳入的關鍵字引數,形式為字典,鍵值為關鍵字引數的關鍵字,字典元素值為對應關鍵字引數的實參值。

2.    語法釋義:

1)    __init__ (self,*args,**kwargs)的引數是與例項定義的引數相對應的,例項定義的語法如下:

例項=類名(*args,**kwargs)

則:a)    self引數表示例項自身,也就是等號左邊的「例項」,按理說在呼叫構造方法前例項不存在,self也不存在,為什麼引數中又可以用self呢?這是由python自動處理的,在呼叫構造方法前,python會呼叫__new__方法建立例項,因此呼叫構造方法時python已經建立了例項,具體請參見本章後面章節關於__new__方法的介紹。從這個意義上說,__new__方法才是真正的構造方法,__init__方法是在此基礎上對例項進行特定的處理;

b)    後面兩個引數args、kwargs是完全複製例項定義中的兩種引數,表示例項定義傳入什麼引數,則__init__方法是在例項定義引數的基礎上增加乙個「self」的引數,並將self作為第乙個引數。

c)    args、kwargs不是兩個引數,是兩種引數,其中kwargs是關鍵字引數,args是非關鍵字引數,用args、kwargs分別傳遞建立例項時傳遞的所有常規實參和關鍵字引數實參,因此可能是0個或多個真正的引數。*args、**kwargs這種形式的引數傳遞模式稱為「引數收集」,具體內容請參見本部落格的《第5.2節 python的函式引數收集》內容;

2)    構造方法不能有任何返回值,否則會報錯;

3)    以上語法是自定義類重寫__init__方法時必須遵守的語法,當python建立例項後自動呼叫該方法,__init__()方法是可選的,如果自定義類沒有重寫該方法,則python 會給出缺省的__init__方法。由於構造方法在例項建立後即執行,因此在例項定義時就需要初始化的例項變數可以通過構造方法賦值來定義。

第8 2節 Python類的 init

前面 第8.1節 python類的構造方法 init 深入剖析 語法釋義 一節介紹了構造方法定義的語法,並進行了語法解釋說明,本節將通過案例來說明構造方法引數傳遞及返回值的情況。一 案例說明 本節定義乙個汽車類,它有四個例項變數 wheelcount,power,oilcostperkm,total...

8 1 學習python的類class

二 定義和使用類 早期的程式語言是面向過程的,資料和函式之間是沒有任何直接聯絡的,它們之間聯絡的方式就是通過函式呼叫提供引數的形式將資料傳入函式進行處理,但這可能因為錯誤的傳遞引數 錯誤地修改了資料而導致程式出錯,當需要修改或維護程式時要從程式提供的一堆資料中去尋找和修改它們。要擴充套件函式的功能,...

第7 9節 案例詳解 Python類封裝

上節介紹了python中類的封裝機制,本節結合乙個具體例子進行詳細說明。我們定義乙個person類,其內部有姓名 年齡和型別三個例項變數,並定義了相關的訪問方法 class person def type self if self.age 16 return 青少年 elif self.age 60...