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'