zoukankan      html  css  js  c++  java
  • 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'>]
    
    

  • 相关阅读:
    ASP.NET Web API 框架研究 Self Host模式下的消息处理管道
    ASP.NET Web API 框架研究 Web Host模式下的消息处理管道
    ASP.NET Web API 框架研究 核心的消息处理管道
    ASP.NET Web API 框架研究 Web Host模式路由及将请求转出到消息处理管道
    ASP.NET Web API 框架研究 ASP.NET Web API 路由
    ASP.NET Web API 框架研究 ASP.NET 路由
    ASP.NET Web API 入门 (API接口、寄宿方式、HttpClient调用)
    MVVM模式
    RESTful Web API 理解
    C# 函数式编程及Monads.net库
  • 原文地址:https://www.cnblogs.com/shanshan-test/p/12885442.html
Copyright © 2011-2022 走看看