• Python


    继承的详解

    https://www.cnblogs.com/poloyy/p/15216652.html

    这篇文章讲的都是单继承,Python 中还有多继承

    Python 多继承的背景

    • 大部分面向对象的编程语言,都只支持单继承,即子类有且只能有一个父类
    • 而 Python 却支持多继承(C++也支持多继承)
    • 和单继承相比,多继承容易让代码逻辑复杂、思路换了一直备受争议,中小型项目中较少使用,后来的 Java、C#、PHP 取消了多继承
    • 多继承带来的问题:多个父类中包含同名的类方法
    • Python 的解决方案:根据子类继承多个父类时这些父类的前后次序决定,即排在前面父类中的类方法会覆盖排在后面父类中的同名类方法【后面文章详解】

    什么是多继承

    • 子类可以拥有多个父亲,并且具有所有父类的属性和方法
    • 儿子可以拥有多个爸爸....爸爸也可以有多个儿子.....

    语法格式

    class 子类(父类1, 父类2, ...):
        pass

      

    类图参考

      

    实际代码

    class A:
        def test(self):
            print("test")
    
    
    class B:
        def demo(self):
            print("demo")
    
    
    class C(A, B):
        ...
    
    
    c = C()
    c.test()
    c.demo()
    
    
    # 输出结果
    test
    demo

     C 继承了 A、B,拥有了他们的所有属性和方法

    多继承带来的顺序问题

    问题的提出

    如果不同的父类中存在同名的方法,子类对象在调用该方法时,会调用哪一个父类的方法呢?

    重点注意

    • 正式开发中,如果需要用到多继承,那么多个父类应该避免使用同名的属性、方法
    • 如果父类存在同名的属性、方法,应该尽量避免使用多继承

    类图

    实际代码

    class A:
        def test(self):
            print("AAA-test")
    
        def demo(self):
            print("AAA-demo")
    
    class B:
        def test(self):
            print("BBB-test")
    
        def demo(self):
            print("BBB-demo")
    
    
    class C(A, B):
        ...
    
    
    c = C()
    c.test()
    c.demo()
    
    
    # 输出结果
    AAA-test
    AAA-demo

    调用的是父类 A 的方法

    如果 C 继承父类的顺序改变一下呢

    # 刚刚是 A, B ; 现在是 B, A
    class C(B, A):
        ...
    
    
    c = C()
    c.test()
    c.demo()
    
    
    # 输出结果
    BBB-test
    BBB-demo
    • 现在变成调用父类 B 的方法了
    • 这又是为什么呢?答案就是 Python 的 MRO 方法搜索顺序

    Python 的 MRO 方法搜索顺序

    https://www.cnblogs.com/poloyy/p/15226424.html

    多继承结合 super() 的使用呢?

    https://www.cnblogs.com/poloyy/p/15223443.html

    新式类和旧式类

    https://www.cnblogs.com/poloyy/p/15226425.html

  • 相关阅读:
    (山理工 1243)母牛问题(大牛生小牛,小牛生。。。。)
    Linux内核分析——第五周学习笔记
    《Linux内核设计与实现》第五章读书笔记
    day41-死锁,信号量,线程q,协程
    day40-线程相关
    day39-进程,线程相关知识
    day38-并发编程
    day37-套接字后续
    day36-socket(C/S架构)套接字
    day35-网络剩余
  • 原文地址:https://www.cnblogs.com/poloyy/p/15224912.html
Copyright © 2020-2023  润新知