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

 

posted on 2024-06-26 17:15  与太阳肩并肩  阅读(1)  评论(0编辑  收藏  举报

导航