Day30.在子类派生的新方法中重用父类功能
1.在子类派生的新方法中重用父类功能_方式一指名道姓调用某一类下的函数
方式一:指名道姓调用某一个类下的函数=====> 不依赖于继承关系 class OldboyPeople: def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex def f1(self): print('%s say hello' %self.name) class Teacher(OldboyPeople): def __init__(self, name, age, sex, level, salary): # 第一种方式指名道姓:从父类中提取方法 OldboyPeople.__init__(self, name, age, sex) self.level = level self.salary = salary tea_obj = Teacher('egon', 18, 'male', 10, 3000) print('方式一:指名道姓调用某一个类下的函数=====> 不依赖于继承关系'.center(60, '-')) print(tea_obj.__dict__, '\n')
2.在子类派生的新方法中重用父类功能_方式二:super()调用父类提供给自己的方法
# 方式二:super()调用父类提供给自己的方法=====> 严格依赖继承关系 # 调用super()会得到一个特殊的对象,该对象会参照发起属性查找的那个类的mro,去当前类的父类中找属性 class OldboyPeople: def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex def f1(self): print('%s say hello' %self.name) class Teacher(OldboyPeople): def __init__(self, name, age, sex, level, salary): '''python2中super()括号中必须传当前类名和self''' # super(Teacher, self).__init__(name, age, sex) '''python3中super()可以简写,调用的是一个方法,自动传入对象''' super().__init__(name, age, sex) self.level = level self.salary = salary print(Teacher.mro()) tea_obj = Teacher('egon', 18, 'male', 10, 3000) print('方式二:super()调用父类提供给自己的方法=====> 严格依赖继承关系'.center(60, '-')) print(tea_obj.__dict__, '\n')
3.在子类派生的新方法中重用父类功能_方式二:super()案例
'''super()案例''' class A: def test(self): super().test() class B: def test(self): print('from B') class C(A, B): pass ''' 输出结果为`from B`, 流程为,先从类C下找是否有test()方法,没有则根据从左往右类A-->类B,进入父类查找 先进入类A下的test()函数下,其中有super()方法,即:super().test(),结果是经过super()方法,返回到类C中 再次查找类C下面的父类B下,查找test()方法函数,即输出`from B` 流程思路:类C没有test()---->进入父类A有test()并且test()下有super()方法----->经过类A返回到类C---- ->查找类C的父类B----->进入父类B的到test()下的打印结果`from B` ''' print('super案例'.center(40, '-')) print(C.mro()) obj = C() obj.test()