python 類 三:子類



本文的部分例子來自於 <<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]



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章