首頁 > 軟體

Python中__init__的用法和理解範例詳解

2023-02-12 06:01:02

Python中__init__的用法和理解

在Python中定義類經常會用到__init__函數(方法),首先需要理解的是,兩個下劃線開頭的函數是宣告該屬性為私有,不能在類的外部被使用或存取。而__init__函數(方法)支援帶引數類的初始化,也可為宣告該類的屬性(類中的變數)。__init__函數(方法)的第一個引數必須為self,後續引數為自己定義。

從文字理解比較困難,通過下面的例子能非常容易理解這個概念:

例如我們定義一個Box類,有width, height, depth三個屬性,以及計算體積的方法:

#!/usr/bin/python
# -*- coding utf-8 -*-
#Created by Lu Zhan
 
class Box:
    def setDimension(self, width, height, depth):
        self.width = width
        self.height = height
        self.depth = depth
 
    def getVolume(self):
        return self.width * self.height * self.depth
 
b = Box()
b.setDimension(10, 20, 30)
print(b.getVolume())

我們在Box類中定義了setDimension方法去設定該Box的屬性,這樣過於繁瑣,而用__init__()這個特殊的方法就可以方便地自己對類的屬性進行定義,__init__()方法又被稱為構造器(constructor)。

#!/usr/bin/python
# -*- coding utf-8 -*-
#Created by Lu Zhan
 
class Box:
    #def setDimension(self, width, height, depth):
    #   self.width = width
    #   self.height = height
    #   self.depth = depth
    def __init__(self, width, height, depth):
        self.width = width
        self.height = height
        self.depth = depth
 
    def getVolume(self):
        return self.width * self.height * self.depth
 
b = Box(10, 20, 30)
print(b.getVolume())

補充:Python __init__()類構造方法

在建立類時,我們可以手動新增一個 __init__() 方法,該方法是一個特殊的類實體方法,稱為構造方法(或建構函式)。

構造方法用於建立物件時使用,每當建立一個類的範例物件時,Python 直譯器都會自動呼叫它。Python 類中,手動新增構造方法的語法格式如下:

def __init__(self,...):
    程式碼塊

注意,此方法的方法名中,開頭和結尾各有 2 個下劃線,且中間不能有空格。Python 中很多這種以雙下劃線開頭、雙下劃線結尾的方法,都具有特殊的意義,後續會一一為大家講解。

另外,__init__() 方法可以包含多個引數,但必須包含一個名為 self 的引數,且必須作為第一個引數。也就是說,類的構造方法最少也要有一個 self 引數。例如,仍以 TheFirstDemo 類為例,新增構造方法的程式碼如下所示:

class TheFirstDemo:
    '''這是一個學習Python定義的第一個類'''
    #構造方法
    def __init__(self):
        print("呼叫構造方法")
    # 下面定義了一個類屬性
    add = 'http://c.biancheng.net'
    # 下面定義了一個say方法
    def say(self, content):
        print(content)

注意,即便不手動為類新增任何構造方法,Python 也會自動為類新增一個僅包含 self 引數的構造方法。

僅包含 self 引數的 __init__() 構造方法,又稱為類的預設構造方法。

在上面程式碼的後面,頂頭(不縮排)直接新增如下程式碼:

zhangsan = TheFirstDemo()

這行程式碼的含義是建立一個名為 zhangsan 的 TheFirstDemo 類物件。執行程式碼可看到如下結果:

呼叫構造方法

顯然,在建立 zhangsan 這個物件時,隱式呼叫了我們手動建立的 __init__() 構造方法。

不僅如此,在 __init__() 構造方法中,除了 self 引數外,還可以自定義一些引數,引數之間使用逗號“,”進行分割。例如,下面的程式碼在建立 __init__() 方法時,額外指定了 2 個引數:

class CLanguage:
    '''這是一個學習Python定義的一個類'''
    def __init__(self,name,add):
        print(name,"的網址為:",add)
#建立 add 物件,並傳遞引數給建構函式
add = CLanguage("it145.com","//www.jb51.net")

注意,由於建立物件時會呼叫類的構造方法,如果建構函式有多個引數時,需要手動傳遞引數,傳遞方式如程式碼中所示(後續章節會做詳細講解)。

執行以上程式碼,執行結果為:
it145.com 的網址為: //www.jb51.net

可以看到,雖然構造方法中有 self、name、add 3 個引數,但實際需要傳參的僅有 name 和 add,也就是說,self 不需要手動傳遞引數。

關於 self 引數,後續章節會做詳細介紹,這裡只需要知道,在建立類物件時,無需給 self 傳參即可。

到此這篇關於Python中__init__的用法和理解的文章就介紹到這了,更多相關__init__在python中用法內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com