首页 > 代码库 > python 类 三:子类

python 类 三:子类



本文的部分例子来自于 <<python核心编程 第二版>>


子类如果不定义构造方法的话,那么自动继承父类的构造方法。


并且在创建子类的实例化对象的时候,父类的构造器将被自动调用。


如果想实现子类自己的构造方法,则要在子类里面去重载父类的构造器。


我们举例子分别说明之。


(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(‘john@doe.spam‘)                      # 调用子类自己的普通方法
                                                        # 进行更新电子邮件
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: john@doe.spam
updated e-mail address for: john Doe
updated e-mail address for: 408-555-1212
john@doe.spam



(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,‘john@aaa.com‘)
print john.name
print john.phone
print john.empid
print john.email

john.update_email(‘john@doe.spam‘)
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
john@aaa.com
updated e-mail address for: john@doe.spam
john@doe.spam



本文出自 “linux与网络那些事” 博客,请务必保留此出处http://khaozi.blog.51cto.com/952782/1858541

python 类 三:子类