本文的部分例子來自於 <<python核心編程 第二版>>
子類如果不定義初始化__init__的話,那麼自動繼承父類的初始化方法。
並且在創建子類的實例化對象的時候,父類的初始化將被自動調用。
子類__init__ 可以調用父類的__init__ 方法實現部分初始化。
也可以不調用父類的__init__,完全自己實現__init__
如果子類沒有任何形式上實現自己的 __init__,則會繼承父類的__init__
我們舉例子分別說明之。
(1) 子類不創建自己的構造方法,自動繼承父類的構造方法,並且在創建子類的實例化對象的時候,會自動的去調用父類的構造方法。
#coding:utf-8 class add_book_entry(object): 'address book entry class' def __init__(self,nm,ph): self.name = nm self.phone = ph print 'created instance for:',self.name def update_phone(self,newph): self.phone = newph print 'updated phone# for :' ,self.name class empl_addr_book_entry(add_book_entry): 'employee address book entry class' '''子類並沒有實現自己的構造方法,那麼將自動繼承父類的構造方法''' def update_email(self,newem): self.email = newem print 'updated e-mail address for:',self.email john = empl_addr_book_entry('john Doe','408-555-1212') # 實例化對象 # 會自動調用父類的構造方法 # 進行對員工的姓名和電話號碼初始化 print john.name print john.phone john.update_email('[email protected]') # 調用子類自己的普通方法 # 進行更新電子郵件 print john.email
程序運行結果:
[root@puppet-master-231-test eg_4]# python2.7 class_subclass.py created instance for: john Doe john Doe 408-555-1212 updated e-mail address for: [email protected] updated e-mail address for: john Doe updated e-mail address for: 408-555-1212 [email protected]
(2) 子類實現自己的構造方法(並引用了父類的構造方法)
#coding:utf-8 class add_book_entry(object): 'address book entry class' def __init__(self,nm,ph): self.name = nm self.phone = ph print 'created instance for:',self.name def update_phone(self,newph): self.phone = newph print 'updated phone# for :' ,self.name class empl_addr_book_entry(add_book_entry): 'employee address book entry class' # 下面是 在子類中顯示的調用了父類的構造方法,因爲方法的調用一般是要綁定實例的 # 而這個並沒有綁定實例(實例還沒創建呢) # 那麼,這種未綁定的方法的調用需要傳遞一個適當的實例即self給方法 def __init__(self,nm,ph,id,em): # 實現子類自己的構造方法 add_book_entry.__init__(self,nm,ph) # 在子類自己的構造方法中引用父類的構造方法 self.empid = id # 在子類的構造方法中增加父類沒有的兩個 self.email = em # 屬性初始化對象 def update_email(self,newem): self.email = newem print 'updated e-mail address for:',self.email john = empl_addr_book_entry('john Doe','408-555-1212',42,'[email protected]') print john.name print john.phone print john.empid print john.email john.update_email('[email protected]') print john.email
程序運行結果:
[root@puppet-master-231-test eg_4]# python2.7 class_subclass.py created instance for: john Doe john Doe 408-555-1212 42 [email protected] updated e-mail address for: [email protected] [email protected]