第8 2節 Python類的 init

2021-09-24 17:15:25 字數 1866 閱讀 5542

前面《第8.1節 python類的構造方法__init__深入剖析:語法釋義》一節介紹了構造方法定義的語法,並進行了語法解釋說明,本節將通過案例來說明構造方法引數傳遞及返回值的情況。

一、    案例說明

本節定義乙個汽車類,它有四個例項變數:wheelcount, power,oilcostperkm,totaldistance,分別對應輪子數、動力、每公里油耗、行駛總里程。為了聚焦內容,我們只在構造方法中顯示引數傳入值,不做任何處理。類定義如下:

class car():

def __init__(self,*args,**kwargs):       

print("in  __init__:args=",args,",kwargs=",kwargs)

二、    案例1:使用常規傳遞實參模式定義例項

car=car(4,'汽油發動機',0.1,0)#引數分別是wheelcount, power,oilcostperkm,totaldistance
執行截圖:

三、    案例2:使用關鍵字引數傳遞實參模式定義例項

使用關鍵字引數方式傳遞實參,關鍵字的名字和類例項變數不一定要對應,只要系統知道誰對誰就可以。

car=car(wheel_count=4,power='汽油發動機',oilcost_perkm=0.1,total_distance=0)
執行截圖:

四、    案例3:使用關鍵字引數和非關鍵字引數混合傳值的模式

car=car(4,'汽油發動機',oilcost_perkm=0.1,total_distance=0)
五、    案例4:不按約定填寫任意個引數

car=car('汽車','測試','隨便填',wheel_count=4,power='汽油發動機',oilcost_perkm=0.1,total_distance=0)
六、    案例5:在建構函式中返回值

1.    類定義:

class car(vehicle):

def __init__(self,wheelcount, power,oilcostperkm):

self.oilcostperkm = oilcostperkm

print("in car __init__:oilcostperkm=",self.oilcostperkm)

super().__init__(wheelcount, power)

return 1

2.    執行例項定義:car=car(4,'汽油發動機',0.1)

由於構造方法有返回值,應該報錯。

3.    截圖:

4.    案例說明:不應該在構造方法中返回值,如果一定要有返回語句,應該返回none。

本節結合案例詳細介紹了構造方法引數的傳遞過程,每個案例都很簡單,但說明:

1、    構造方法中的引數除了多了乙個self引數外,與例項定義時傳遞的引數是一致的;

2、    通過收集引數模式(收集引數的概念請見上一節或《第5.2節 python的函式引數收集》內容)可以支援可變個數的引數,但實際上增加了編碼的代價,需要**支援引數的解碼,一般的構造方法中不建議使用,只有在需要實現特定介面但外圍介面支援可變格式呼叫時才使用,這時也應該優先在構造方法中明確已經確定引數的引數名,只有可變部分用收集引數模式;

3、    構造方法不能返回值,如果一定要有返回語句,請返回none。

**老猿python部落格文章目錄**:

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

一 引言 凡是物件導向設計的語言,在類例項化時都有構造方法,很多語言的構造方法名與類名一致,python中類的構造方法比較特殊,必須是 init 特殊方法。二 語法釋義 1.語法 init self,args,kwargs 其中 1 self為建立的例項,由python自動傳入。各位看官注意 1 關...

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

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

生存志 第82節 儒門分八派

儒門分八派 當左丘明於西元前451年以105歲高齡駕鶴西遊時,孔子的徒子徒孫們已經將儒學教義傳遍中原大地,並且由於各自見解的不同,儒門也 成了好幾個教派。韓非子 顯學 中提到,世之顯學,儒 墨也。儒之所至,孔丘也。墨之所至,墨翟也。自孔子之死也,有子張之儒,有子思之儒,有顏氏之儒,有孟氏之儒,有漆雕...