类的继承

一. 子类继承父类的构造函数

子类不重写 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.nameclass Son(Father): def getName(self): return 'Son '+self.first_nameif __name__=='__main__': son = Son('li','si') print ( son.getName() )

输出结果为:name: lisiSon 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.nameclass 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_nameif __name__=='__main__': son = Son('li','si') print ( son.getName() )

3 . 重写了init ,要继承父类的构造方法,可以使用 super 关键字:

`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.nameclass 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_nameif __name__=='__main__': fa = Father('li','san') son = Son('li','si') print ( son.getName() )输出结果为:name: lisanname: lisiname: siSon 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 # 不想向类中添加任何其他的属性或者方法,可以使用关键字passanimal = Animal('狗', '5')animal.info()cat = Cat('猫','3')cat.info()输出结果:这是父类的__init__方法这是一只狗 ,今年5岁了这是父类的__init__方法这是一只猫 ,今年3岁了

这里Animal为父类,Cat为子类,子类继承了父类的特性,因此Cat也拥有info方法。
子类除了可以继承父类的方法,还可以覆盖父类的方法:

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。

子类可以在继承父类方法的同时,对方法进行重构。这样一来,子类的方法既包含父类方法的特性,同时也包含子类自己的特性:

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()