了解继承——子类继承父类所有的属性和方法
#定义父类 class A(object): def __init__(self): self.num = 1 def info_print(self): print(self.num) #定义子类 class B(A): pass #创建对象,验证结论 result = B() result.info_print()单继承——一个子类继承一个父类(大概状况与上面的例子相同,为保持队形一致,再次书写)
#师傅类 class Master(): def __init__(self):#属性 self.kongfu = '[古法煎饼果子配方]' def make_cake(self):#方法 print(f'{self.kongfu}制作煎饼果子') #定义子类 class Prentice(Master):#表示Prentice继承Master pass result = Prentice() print(result.kongfu) result.make_cake()多继承——一个子类同时继承多个父类(如下例:定义两个父类,由子类继承)
class Master():#父类 def __init__(self):#属性 self.kongfu = '[古法煎饼果子配方]' def make_cake(self):#方法 print(f'{self.kongfu}制作煎饼果子') class School():父类 def __init__(self): self.kongfu = '[新式煎饼果子配方]' def make_cake(self): print(f'{self.kongfu}制作煎饼果子') class Prentice(Master,School):#子类 pass result = Prentice() print(result.kongfu) result.make_cake() #如果一个类继承多个父类,那么子类优先继承前一个父类否认同名属性子类重写父类同名和方法——当子类和父类具有同名的属性和方法的时候,子类如何输出自己的同名属性和方法
class School(): def __init__(self): self.kongfu = '[新式煎饼果子配方]' def make_cake(self): print(f'{self.kongfu}制作煎饼果子') class Prentice(Master,School): def __init__(self): self.kongfu = '[独创煎饼果子配方]' def make_cake(self): print(f'独创{self.kongfu}制作煎饼果子') result = Prentice() print(result.kongfu) result.make_cake() #输出:[独创煎饼果子配方] 独创[独创煎饼果子配方]制作煎饼果子 #结论:如果子类与父类拥有同名的属性和方法的时候,子类创建对象调用属性和方法的时候,优先调用子类的同名属性和方法 print(Prentice.__mro__)#使用__mor__函数去查看各个类的继承情况与属性子类调用父类同名属性和方法——当子类与父类拥有相同名字的属性与方法时,如何调用父类的方法和属性
''' 子类重写父类同名属性和方法 ''' class Master(): def __init__(self):#属性 self.kongfu = '[古法煎饼果子配方]' def make_cake(self):#方法 print(f'{self.kongfu}制作煎饼果子') class School(): def __init__(self): self.kongfu = '[新式煎饼果子配方]' def make_cake(self): print(f'{self.kongfu}制作煎饼果子') class Prentice(Master,School): def __init__(self): self.kongfu = '[独创煎饼果子配方]' def make_cake(self): print(f'独创{self.kongfu}制作煎饼果子') def make_master_cake(self):#子类调用父类的同名方法和属性——将父类的同名方法和属性在次封装 #父类名.函数名 Master.__init__(self)#注意:都需要加self,为对象参数传入保留位置 Master.make_cake(self) result = Prentice() print(result.kongfu) result.make_master_cake() print(Prentice.__mro__)