一. 子类继承父类的构造函数ide
#-*-coding:utf-8-*- class Father(object): def __init__(self, first_name,last_name): self.first_name = first_name self.last_name = last_name print ( "name: %s%s" %( self.first_name,self.last_name) ) def getName(self): return 'Father ' + self.name class Son(Father): def getName(self): return 'Son '+self.first_name if __name__=='__main__': son = Son('li','si') print ( son.getName() )
输出结果为: name: lisi Son li
2 . 重写init ,实例化子类,就不会调用父类已经定义的 init函数
#-*-coding:utf-8-*- class Father(object): def __init__(self, first_name,last_name): self.first_name = first_name self.last_name = last_name print ( "name: %s%s" %( self.first_name,self.last_name) ) def getName(self): return 'Father ' + self.name class Son(Father): def __init__(self, first_name, last_name): self.first_name = first_name self.last_name = last_name print("name: %s" %( self.last_name)) def getName(self): return 'Son '+self.last_name if __name__=='__main__': son = Son('li','si') print ( son.getName() )
3 . 重写了init ,要继承父类的构造方法,能够使用 super 关键字:code
`super(子类,self).__init__(参数1,参数2,....)`
#-*-coding:utf-8-*- class Father(object): def __init__(self, first_name,last_name): self.first_name = first_name self.last_name = last_name print ( "name: %s%s" %( self.first_name,self.last_name) ) def getName(self): return 'Father ' + self.name class Son(Father): def __init__(self, first_name, last_name): super(Son,self).__init__(first_name,last_name) self.last_name = last_name print("name: %s" %( self.last_name)) def getName(self): return 'Son '+self.last_name if __name__=='__main__': fa = Father('li','san') son = Son('li','si') print ( son.getName() ) 输出结果为: name: lisan name: lisi name: si Son si
二. 普通类方法的继承继承
class Animal(): def __init__(self, kind, age): self.kind = kind self.age = age print("这是父类的__init__方法") def info(self): print('这是一只' + self.kind, ',今年' + self.age + '岁了') class Cat(Animal): pass # 不想向类中添加任何其余的属性或者方法,能够使用关键字pass animal = Animal('狗', '5') animal.info() cat = Cat('猫','3') cat.info() 输出结果: 这是父类的__init__方法 这是一只狗 ,今年5岁了 这是父类的__init__方法 这是一只猫 ,今年3岁了
这里Animal为父类,Cat为子类,子类继承了父类的特性,所以Cat也拥有info方法。
子类除了能够继承父类的方法,还能够覆盖父类的方法:utf-8
class Animal(): def __init__(self, kind, age): self.kind = kind self.age = age print("这是父类的__init__方法") def info(self): print('这是一只' + self.kind, ',今年' + self.age + '岁了') class Cat(Animal): def __init__(self, kind, age,name): super().__init__(kind, age) print("这是子类的__init__方法") self.name = name def info(self): print('这是一只' + self.kind, ',今年' + self.age + '岁了','它的名字是'+self.name) animal = Animal('狗', '5') animal.info() cat = Cat('猫','3','kitty') cat.info()
这里子类Cat里的info 覆盖了父类的info。get
子类能够在继承父类方法的同时,对方法进行重构。这样一来,子类的方法既包含父类方法的特性,同时也包含子类本身的特性:it
class Animal(): def __init__(self, kind, age): self.kind = kind self.age = age print("这是父类的__init__方法") def info(self): print('这是一只' + self.kind, ',今年' + self.age + '岁了') class Cat(Animal): def __init__(self, kind, age,name): super().__init__(kind, age) print("这是子类的__init__方法") self.name = name def info(self): super().info() print('它的名字是'+self.name) animal = Animal('狗', '5') animal.info() cat = Cat('猫','3','kitty') cat.info()