广告
返回顶部
首页 > 资讯 > 后端开发 > Python >多重继承
  • 463
分享到

多重继承

2023-01-31 00:01:02 463人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

  继承是面向对象编程的一个重要的方式,通过继承,子类就可以扩展父类的功能 由于python允许使用多重继承,因此,MixIn就是一种常见的设计 只允许单一继承的语言(如Java)不能使用MixIn的设计 通常的继承关系设计如下:   

 

继承是面向对象编程的一个重要的方式,通过继承,子类就可以扩展父类的功能
由于python允许使用多重继承,因此,MixIn就是一种常见的设计
只允许单一继承的语言(如Java)不能使用MixIn的设计

通常的继承关系设计如下:
  继承关系:Animal
        Dog(Animal)
        Bat(Animal)
        Ostrich(Animal)
        Parrot(Animal)
  按照哺乳动物和鸟类归类,要这样设计:
    Animal
      Mammal(Animal)
        Dog(Mammal)
        Bat(Mammal)
      Bird(Animal)
        Ostrich(Bird)
        Parrot(Bird)

  按照"能跑"和"能飞"来归类,要这样设计:
    Animal
      Runnable(Animal)
        Dog(Runnable)
        Ostrich(Runnable)
      Flyable(Animal)
        Bat(Flyable)
        Parrot(Flyable)

  要把上面的两种分类都包含进来,要这样设计:
    Animal
      Mammal(Animal)
        MRun(Mammal)
          Dog(MRun)
        MFly(Mammal)
          Bat(MRun)
      Bird(Animal)
        BRun(Bird)
          Ostrich(BRun)
        BFly(Bird)
          Parrot(BRun)

  如果要再增加其他的类别,类的数量会呈指数增长,很明显这样设计是不行的

  正确的做法是采用多重继承,通过多重继承,一个子类就可以同时获得多个父类的所有功能

    Runnable
    Flyable
    Animal
      Mammal(Animal)
        Dog(Mammal,Runnable) 对于需要Runnable功能的动物,就多继承一个Runnable
        Bat(Mammal,Flyable) 对于需要Flyable功能的动物,就多继承一个Flyable
      Bird(Animal)
        Ostrich(Bird,Runnable)
        Parrot(Bird,Flyable)

 

MixIn
  在设计类的继承关系时,通常,主线都是单一继承下来的
  但如果需要加入额外的功能,通过多重继承就可以实现,这种设计通常称之为MixIn
  MixIn的目的就是给一个类增加多个功能,这样,在设计类的时候,优先考虑通过多重继承来组合多个MixIn的功能,而不是设计多层次的复杂的继承关系
  这样一来,我们不需要复杂而庞大的继承链,只要选择组合不同的类的功能,就可以快速构造出所需的子类

  如下:
    RunnableMixIn 名称带后缀MixIn表示该功能是继承子类需要追加的功能
    FlyableMixIn
    Animal
      Mammal(Animal)
        Dog(Mammal,RunnableMixIn) 对于需要Runnable功能的动物,就多继承一个RunnableMixIn
        Bat(Mammal,FlyableMixIn) 对于需要Flyable功能的动物,就多继承一个FlyableMixIn
      Bird(Animal)
        Ostrich(Bird,RunnableMixIn)
        Parrot(Bird,FlyableMixIn)

  Python内置的很多库也使用了MixIn
  如Python自带了tcpServer和UDPServer这两类网络服务,而要同时服务多个用户就必须使用多进程或多线程模型
  这两种模型由ForkingMixIn和ThreadingMixIn提供。通过组合,我们就可以创造出合适的服务来

  编写一个多进程模式的TCP服务:class MyTCPServer(TCPServer, ForkingMixIn): pass
  编写一个多线程模式的UDP服务:class MyUDPServer(UDPServer, ThreadingMixIn): pass
  编写一个更先进的协程模型:class MyTCPServer(TCPServer, CoroutineMixIn): pass

 

--结束END--

本文标题: 多重继承

本文链接: https://www.lsjlt.com/news/182602.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python 继承与多重继承
    当然,如果不支持python继承,语言特性就不值得称为“类”。派生类定义的语法如下所示: <statement-1> . . . <statement-N> 名称 BaseC...
    99+
    2023-01-31
    python
  • 多重继承
      继承是面向对象编程的一个重要的方式,通过继承,子类就可以扩展父类的功能 由于Python允许使用多重继承,因此,MixIn就是一种常见的设计 只允许单一继承的语言(如Java)不能使用MixIn的设计 通常的继承关系设计如下:   ...
    99+
    2023-01-31
  • C++多继承(多重继承)的实现
    在前面的例子中,派生类都只有一个基类,称为单继承(Single Inheritance)。除此之外,C++也支持多继承(Multiple Inheritance),即一个派生类可以有...
    99+
    2023-05-16
    C++多继承 C++多重继承
  • python——多重继承
    #方式一 class A():     def __init__(self, name):         self.name = name         print("a class ...") class B():     def ...
    99+
    2023-01-31
    python
  • python3中多重继承的问题
    本来以为多重继承很简单,但是多看了一些资料后发现还是挺复杂的。 如果继承情况简单就还比较好理解,但是如果继承的情况太过于复杂的话,python3 中会使用拓扑排序的方式来寻找继承的父类。 有关继承的拓扑排序 关于这方...
    99+
    2023-01-31
  • C#怎么实现多重继承
    这篇文章主要讲解了“C#怎么实现多重继承”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#怎么实现多重继承”吧!C# 多重继承多重继承指的是一个类别可以同时从多于一个父类继承行为与特征的功能...
    99+
    2023-06-17
  • VB.NET如何实现多重继承
    小编给大家分享一下VB.NET如何实现多重继承,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!VB.NET多重继承我注意到了一个情况,那就是C#允许多重继承(multiple inheritance),但是在VB.NET里我...
    99+
    2023-06-17
  • java中怎么实现多重继承
    在Java中,一个类只能直接继承自一个父类,无法直接实现多重继承。但是可以通过接口来实现类似多重继承的功能。接口是一种抽象的类,它可...
    99+
    2023-09-14
    java
  • C++中多重继承问题详解
    C++中多重继承问题详解引言在C++中,多重继承是一种特性,允许一个派生类从多个基类中继承属性和行为。然而,由于多重继承引入了一些复杂性,开发人员必须小心处理,以避免潜在的问题。本文将详细讨论C++中多重继承的问题,并提供具体的代码示例。基...
    99+
    2023-10-22
    C++ 多重继承 问题详解
  • Python中怎么创建多重继承
    本篇文章为大家展示了Python中怎么创建多重继承,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Python 多重继承可能是非常有用的方法。然而,当项目达到某种程度的复杂性之后,过程代码通常会暴露出...
    99+
    2023-06-17
  • python 多重继承之拓扑排序
    python 多重继承之拓扑排序一、什么是拓扑排序 在图论中,拓扑排序(Topological Sorting) 是一个 有向无环图(DAG,Directed Acyclic Graph) 的所有顶点的线性序列。且该序列必须满足下面两个条件...
    99+
    2023-01-31
    拓扑 python
  • PHP5中怎么实现多重继承
    本篇文章给大家分享的是有关PHP5中怎么实现多重继承,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。PHP5多重继承的具体代码:< //PHP5 接口&...
    99+
    2023-06-17
  • php是多继承还是单继承
    本文操作环境:windows10系统、php 7、thinkpad t480电脑。php是单继承还是多继承?可能你也被这个问题困惑很久了吧。首先,PHP是单继承,他是不支持多继承的。面向对象的特点是封装、继承、多态。这里的继承是指类与类之间...
    99+
    2016-11-13
    php 单继承 多继承
  • Java中一个类可以继承多个类吗?揭秘多重继承的秘密!
    大家好,我是你们的小米!今天,我们来聊聊Java中一个备受争议的话题——"一个类可以继承多个类吗?"这是一个让许多Java初学者困惑的问题,也是一个常常被问及的热门话题。那么,到底Java中是否允许一个类继承多个类呢?让我们一起揭开这个谜...
    99+
    2023-09-14
    java python 开发语言
  • java怎么实现多重继承效果
    在Java中,类是不支持多重继承的,即一个类不能直接继承多个父类。但是可以通过接口来实现类似多重继承的效果。接口是一种特殊的类,它只...
    99+
    2023-08-08
    java
  • 谈谈iOS中的多继承与多重代理
    前言 多继承和多重代理在swift的语言层面上是不支持的,但我们有时会遇到这样的问题: 类B和C分别继承自A,B1和B2继承自B,C1和C2继承自C.现在我们需要在B1和C1中...
    99+
    2022-06-05
    ios 多继承 多重代理
  • JavaScript继承与多继承实例讲解
    这篇文章主要介绍“JavaScript继承与多继承实例讲解”,在日常操作中,相信很多人在JavaScript继承与多继承实例讲解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2022-10-19
  • 多继承 , 组合 , 菱形继承 , 接口
    一, 复习 属性的的正确存放位置: 类中应该存储所有对象公共的内容 对象中存储都是每个对象独有的(都不同) 初始化函数: 给对象的属性赋初值 , 可以保证只要对象被创建就一定有相应的属性 节省了重复代码 ...
    99+
    2023-01-31
    组合 菱形 接口
  • day24 03 多继承
    day24 03 多继承   正常的代码中  单继承==减少了代码的重复 继承表达的是一种 子类是父类的关系   1、简单的多继承关系  A,B,C,D四个类,其中D类继承A,B,C三个父类,因此也叫多继承,子类方法调用的时候先找自己里面...
    99+
    2023-01-31
  • 继承和多态
    在OOP程序设计中,当定义一个class的时候,可从某个现有的class继承 新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class) 格式:   class...
    99+
    2023-01-31
    多态
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作