首頁  >  文章  >  後端開發  >  構造函數的使用方法介紹

構造函數的使用方法介紹

PHP中文网
PHP中文网原創
2017-06-21 16:36:142398瀏覽

類別是指:描述一種事物的定義,是個抽象的概念 
實例指:該種事物的一個特定的個體,是具體的東西 

打個比方: 
# 「人」是一個類別。 「張三」是人類的一個具體例子 

在程式設計時也是同樣的道理,你先自己定義一個「類別」,當你需要用時,用「類別」的定義來創造一個具體的例子。 

用類別的定義來建立一個實例,就叫做類別的實例化。
實例化過程就是呼叫類別的建構子,完成該實例的資料分配

下面用一個洗衣機的例子來示範:

這個是一個簡單的手動洗衣機w 實例化了Washer類別:

 1 #class Washer: 2 class Washer:#定义一个Washer类 3  4     def __init__(self): #这是定义类的构造函数,也是一个特殊的实例方法 5         self.water=0   #实例的属性(变量) 6         self.scour=0 7  8     def add_water(self,water):#实例的方法(函数),可以接受实例化后传过来的参数给类内实例变量,又因为实例继承了类的属性和方法,所以 9     #相当于传递给了类的实例化对象的实例变量10         print('Add water:',water)11         self.water=water#在类的方法内引用实例变量用 self.属性名12 13     def add_scour(self,scour):14         self.scour=scour15         print('Add scour:',scour)16 17     def start_wash(self):18         print('Start wash...')19         20 if __name__=='__main__':21     w=Washer()#类的实例化22     w.add_water(10)#传递参数到实例变量23     w.add_scour(2)24     w.start_wash()

執行結果:

##類別內定義實例方法需要手動加上self參數(如第4行),但在類別實例化後呼叫這個方法時不必手動加self參數,python會自動添加,如第22行。

實例化方法是 w=Washer()  ,可以看出需要在類別後面加一個括號。

類別外呼叫類別內定義的實例方法可以實例名稱.方法名稱() ,例如

w.add_scour(2),必要的时候加上参数。
 


 下面改動程序,弄成半自動洗衣機,即在類別的內部,方法之間相互呼叫。

washa.py:

 1 class Washer: 2  3     def __init__(self): 4         self.water=0 5         self.scour=0 6  7     def set_water(self,water): 8         self.water=water 9         self.add_water()10 11     def set_scour(self,scour):12         self.scour=scour13         self.add_scour()#在类内调用函数,用 self.方法名14 15     def add_water(self):16         print('Add water:',self.water)17 18     def add_scour(self):19         print('Add scour:',self.scour)20 21     def start_wash(self):22         print('Start wash...')23         24 if __name__=='__main__':25     w=Washer()26     w.set_water(10)27     w.set_scour(2)28     w.start_wash()29
也可以改成:

 1 class Washer: 2  3     def __init__(self): 4         self.water=0 5         self.scour=0 6  7     def set_water(self,water): 8         self.water=water        
 9 10     def set_scour(self,scour):11         self.scour=scour        
12 13     def add_water(self):14         print('Add water:',self.water)15 16     def add_scour(self):17         print('Add scour:',self.scour)18 19     def start_wash(self):20         self.add_water()21         self.add_scour()22         print('Start wash...')23         24 if __name__=='__main__':25     w=Washer()26     w.set_water(10)27     w.set_scour(2)28     w.start_wash()
執行結果:

##做如下改動,使用者可以不設定洗衣機加水和洗滌劑量也可以洗衣服:

 

 1 class Washer: 2  3     def __init__(self): 4         self.water=10#将实例属性修改为默认的标准洗衣程序需要的量 5         self.scour=2 6  7     def set_water(self,water): 8         self.water=water        
 9 10     def set_scour(self,scour):11         self.scour=scour        
12 13     def add_water(self):14         print('Add water:',self.water)15 16     def add_scour(self):17         print('Add scour:',self.scour)18 19     def start_wash(self):20         self.add_water()21         self.add_scour()22         print('Start wash...')23         24 if __name__=='__main__':25     w=Washer()26 ##    w.set_water(10) #这两行代码注释掉,代表用户不必设置水和洗涤剂量27 ##    w.set_scour(2)28     w.start_wash()29
但是這樣,只能加入10L水和2L洗滌劑,不好,要改進。用到構造函數。

 


 

#

 1 class Washer: 2  3     def __init__(self,water=10,scour=2): 4         self.water=water 5         self.scour=scour 6  7     def set_water(self,water): 8         self.water=water        
 9 10     def set_scour(self,scour):11         self.scour=scour        
12 13     def add_water(self):14         print('Add water:',self.water)15 16     def add_scour(self):17         print('Add scour:',self.scour)18 19     def start_wash(self):20         self.add_water()21         self.add_scour()22         print('Start wash...')23         24 if __name__=='__main__':25     w=Washer()26     w.start_wash()27 28     wb=Washer(100,10)29     wb.start_wash()30 31     wc=Washer(100,10)32     wc.set_water(50)33     wc.set_scour(5)34     wc.start_wash()35 36     37 38     39

################# #####建構子可以使類別在實例化時實例物件更加豐富,具有實例化不同種類的實例的作用。 ################## ####

以上是構造函數的使用方法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn