python中继承分为单继承或多继承。父类称为基类。
子类继承了父类的所有属性。
子类调用属性时,先在自己的属性中找,找不到才到父类属性中找。
# -*- coding: utf-8 -*- class Dad: '这个是父类' money=100 def __init__(self,name): print('父亲') self.name=name def Play(self): print('%s正在工作'%self.name) #单继承==>子类(父类) class Son(Dad): money = 2000 print(Dad.money) print(Son.money) son_1=Son('小明') son_1.Play() print(son_1.name)
子类和父类存在相同属性情况
# -*- coding: utf-8 -*- class Dad: '这个是父类' money=100 def __init__(self,name): print('父亲') self.name=name def Play(self): print('%s正在工作'%self.name) #单继承==>子类(父类) class Son(Dad): money = 2000 def __init__(self,name,age): self.name=name self.age=age def Play(self): print('%s正在工作'%self.name) #子类和父类存在相同属性情况 son_1=Son('小明',18) print(son_1.name) print(son_1.age) son_1.Play()
什么时候用继承
1.当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好
2.当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好
继承具有两种含义
1.继承基类的方法,并且作出自己的改变或者扩展。(代码重用,意义不大)
2.声明某个子类兼容与某基类,定义一个接口类,子类继承接口类,并且实现接口中定义的方法。(接口继承非常重要,父类规定好子类必须有的属性,子类具体实现)
接口继承
接口继承实质上是要求"做出一个良好的抽象,这个抽象规定了一个兼容接口,使得外面调用者无需关心具体细节,可一视同仁处理实现了特定接口的所有对象",这在程序设计中叫做归一化。
归一化使得高层的外部使用者可以不加区分的处理所有接口兼容的对象集合。
接口类继承实例
# -*- coding: utf-8 -*- import abc class file(metaclass=abc.ABCMeta): @abc.abstractclassmethod def read(self): pass @abc.abstractclassmethod def write(self): pass class disk(file): def read(self): print('disk------>read') def write(self): print('disk------>write') class cd_rom(file): def read(self): print('d_rom------>read') def write(self): print('d_rom------>write') class mem(file): def read(self): print('mem------>read') def write(self): print('mem------>write') #如果基类中有一个没有实现基类的功能,会报错 file1=disk() file1.read() file1.write()