• python-多继承


    python的新式类和经典类

    class A: # 经典类
        pass
    
    class B(object): # 新式类
        pass
    
    • python2中默认都是经典类,只有显示继承了object才是新式类
    • python3中默认都是新式类,不必显示写出继承object

    简单的多继承

    class Teacher():
    
        def knowledge(self):
            print("我可以教人读书")
    
    class parents():
    
        def property(self):
            print("我有很大的家业")
    
    class Student(Teacher, parents):
    
        def play(self):
            print("我是一个学生,我会玩")
    
    s = Student()
    s.play()  # 学生类自己的玩方法
    s.knowledge()  # 老师类的知识方法
    s.property()  # 父母类的家业方法
    
    • 有相同的方法名时,多继承的查找顺序
      • 从左到右查找(继承的父类都只有一层的时候)
    class Teacher():
    
        def knowledge(self):
            print("我可以教人读书")
    
        def eat(self):
            print("老师吃饭的模样")
    
    
    class parents():
    
        def property(self):
            print("我有很大的家业")
    
        def eat(self):
            print("父母吃饭的模样")
    
    class Student(Teacher, parents):
    
        def play(self):
            print("我是一个学生,我会玩")
    
    
    s = Student()
    s.eat()
    
    控制台输出:
    老师吃饭的模样
    
    • 有相同的方法名时,多继承的查找顺序(不止有一层,父类上面还有父类,父类上面还有父类的情况)
    class Principal():
    
        def eat(self):
            print("我是一个校长,我是校长的吃饭模样")
    
    
    class Teacher(Principal):
    
        def knowledge(self):
            print("我可以教人读书")
    
        # def eat(self):
        #     print("老师吃饭的模样")
    
    class grandpa():
    
        def eat(self):
            print("我是爷爷,我是爷爷吃饭的模样")
    
    
    class parents():
    
        def property(self):
            print("我有很大的家业")
    
        def eat(self):
            print("父母吃饭的模样")
    
    class Student(Teacher, parents):
    
        def play(self):
            print("我是一个学生,我会玩")
    
    
    # 此时学生类继承了,老师类和父母类,
    # 老师类无吃饭方法,父母类有吃饭方法,老师类的父类-校长类有吃饭的方法,父母类的父类-爷爷类有吃饭的方法
    s = Student()
    s.eat()
    
    控制台输出:
    我是一个校长,我是校长的吃饭模样
    

    哇,这样看并不是按照广度优先来查找的呢,其实是按照c3算法来进行查找的,这里c3算法没必要了解,想要了解继承的顺序使用mro方法就可以看到

    print(s.mro())
    控制台:
    [<class '__main__.Student'>, <class '__main__.Teacher'>, <class '__main__.Principal'>, <class '__main__.parents'>, <class '__main__.Grandpa'>, <class 'object'>]
    
    

  • 相关阅读:
    使用Power Query从Web页面获取图像到Power BI报告中
    视频 |【2019】Power BI 8月产品功能更新讲解
    【2019】微软Power BI 每月功能更新系列——Power BI 8月版本功能完整解读
    视频 |【2019】Power BI 7月产品功能更新讲解
    2019 年 BI 平台 Top 14
    2016 黑客必备的Android应用都有哪些?
    J2EE完全手册(二)
    JavaBean ,Enterprise Bean(EJB), 三种Bean, 以及POJO
    J2EE完全手册(一)
    J2EE简介
  • 原文地址:https://www.cnblogs.com/shanshan-test/p/12885442.html
Copyright © 2020-2023  润新知