了解继承——子类继承父类所有的属性和方法
#定义父类
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__)