Python建構函式


建構函式是一種特殊型別的方法(函式),它在類的範例化物件時被呼叫。 建構函式通常用於初始化(賦值)給範例變數。 建構函式還驗證有足夠的資源來使物件執行任何啟動任務。

建立一個建構函式

建構函式是以雙下劃線(__)開頭的類函式。建構函式的名稱是__init__()

建立物件時,如果需要,建構函式可以接受引數。當建立沒有建構函式的類時,Python會自動建立一個不執行任何操作的預設建構函式。

每個類必須有一個建構函式,即使它只依賴於預設建構函式。

舉一個例子:

建立一個名為ComplexNumber的類,它有兩個函式__init__()函式來初始化變數,並且有一個getData()方法用來顯示數位。

看這個例子:

#!/usr/bin/python3
#coding=utf-8

class ComplexNumber:

    def __init__(self, r = 0, i = 0):
        """"初始化方法"""
        self.real = r 
        self.imag = i 

    def getData(self):
        print("{0}+{1}j".format(self.real, self.imag))

if __name__ == '__main__':
    c = ComplexNumber(5, 6)
    c.getData()

執行上面程式碼,得到以下結果 -

5+6j

可以為物件建立一個新屬性,並在定義值時進行讀取。但是不能為已建立的物件建立屬性。

看這個例子:

#!/usr/bin/python3
#coding=utf-8

class ComplexNumber:

    def __init__(self, r = 0, i = 0):
        """"初始化方法"""
        self.real = r 
        self.imag = i 

    def getData(self):
        print("{0}+{1}j".format(self.real, self.imag))

if __name__ == '__main__':
    c = ComplexNumber(5, 6)
    c.getData()

    c2 = ComplexNumber(10, 20)
    # 試著賦值給一個未定義的屬性
    c2.attr = 120
    print("c2 = > ", c2.attr)

    print("c.attr => ", c.attr)

執行上面程式碼,得到以下結果 -

5+6j
c2 = >  120
Traceback (most recent call last):
  File "D:\test.py", line 23, in <module>
    print("c.attr => ", c.attr)
AttributeError: 'ComplexNumber' object has no attribute 'attr'