多重继承

多重继承

大家好,又见面了,我是全栈君。

#前面讲的是单继承,Python还支持多重继承。多重继承的类定义如下:
1 class DerivedClassName(Base1,Base2,Base3):
2          <statement-1>
3         .
4         .
5         . 
6          <statement-N>

#可以看到,多重继承就是有多个基类(父类或超类)。
#需要注意圆括号中父类的顺序,若父类中有相同的方法名,在子类使用时未指定,Python会从左到右搜索。若方法在子类中未找到,则从左到右查找父类中是否包含方法。
#继续以前面的Animal类为例,假设要实现4种动物:Dog(狗)、Bat(蝙蝠)、Parrot(鹦鹉)、ostrich(鸵鸟)。
#如果按照哺乳动物和鸟类分类,我们可以设计按哺乳动物分了的类层次图,如图1。如果按照“会跑”和“会飞”分类,我们可以设计按行为功能分类的类层次图,如图2。
#如果要把上面的两种分类都包含进来,就得设计更多层次:
#哺乳类:包含会跑的哺乳类和会飞的哺乳类。
#鸟类:包含会跑的鸟类和会飞的鸟类。
多重继承
多重继承
多重继承
#如果还要增加“宠物类”和“非宠物类”,类的数量就会呈指数增长,显然这样设计是不可行的。
#正确的做法是采用多重继承。首先,主要的类层次仍按照哺乳类的鸟类设计,设计代码如下:
 1 #! /usr/bin/python
 2 #-*-coding:UTF-8-*-
 3 #class_多重继承
 4 
 5 class Animal(object):
 6     pass
 7 
 8 #大类:
 9 class Mammal(Animal):
10     pass
11 
12 class Bird(Animal):
13     pass
14 
15 #各种动物:
16 class Dog(Mammal):
17     pass
18 
19 class Bat(Mammal):
20     pass
21 
22 class Parrot(Mammal):
23     pass
24 
25 class Ostrich(Mammal):
26     pass

#接下来,给动物加上Runnable和Flyable功能。我们先定义好Runnable和Flyable类:
1 class Runnable(object):
2     def run(self):
3         print('Is Running...')
4 
5 class Flyable(object):
6     def fly(self):
7         print('Is Flying...')

#大类定义好后,对需要Runnable功能的动物对Runnable的继承,如Dog:
1 class Dog(Mammal,Runnable):    
2         pass

#对需要Flyable功能的动物添加对Flyable的继承,如Bat:
1 class Bat(Manmmal,Flyable):
2         pass

#执行如下语句:
1 dog=Dog
2 dog.run

#执行结果如下:
1 D:\Pythonworkspace>python class_多重继承.py
2 Is Running...

#这样,通过上面的多重继承,一个子类就可以继承多个父类,同时获得多个父类所有非私有功能。

 
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/DLHe/p/8027402.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/107842.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • (十一)DSP28335基础教程——EQEP实验(直流电机转速检测)

    (十一)DSP28335基础教程——EQEP实验(直流电机转速检测)0前言这一节我们来学习DSP的EQEP模块的功能。实验目标:通过光电编码器,将采集直流减速电机的转速并显示在LCD1602上。由于28335控制LCD1602的例程并不多,在下面解释的过程会详细贴出代码,并给出一些注意事项。本节将分为硬件部分、软件部分和实验展示三个方面进行介绍,不清楚的欢迎留言。1硬件部分我们需要五个硬件:可调电源、DSP28335核心板、烧写器、自带光电编码器的直流减速电机和LCD1602。其中,电机的额定电压为12V,因此,我们通过可调电源来调整电压,则可以调整电机的转速

  • POSIX 螺纹具体解释(1-概要)

    POSIX 螺纹具体解释(1-概要)

  • 【多目标优化】2. 非支配排序遗传算法 —(NSGA、NSGA-II)

    【多目标优化】2. 非支配排序遗传算法 —(NSGA、NSGA-II)多目标优化系列:MOP_1.多目标优化的相关基本概念MOP_2.非支配排序遗传算法—(NSGA、NSGA-II)MOP_3.基于分解的多目标进化算法—(MOEAD)1.非支配排序遗传算法(NSGA)1995年,Srinivas和Deb提出了非支配排序遗传算法(Non-dominatedSortingGeneticAlgorithms,NSGA)。这是一种基于P…

  • JAVA的垃圾回收机制_java的内存回收机制

    JAVA的垃圾回收机制_java的内存回收机制一:垃圾回收机制的意义java语言中一个显著的特点就是引入了java回收机制,是c++程序员最头疼的内存管理的问题迎刃而解,它使得java程序员在编写程序的时候不在考虑内存管理。由于有个垃圾回收机制,java中的额对象不在有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存;内存泄露:指该内存空间使用完毕后未回收,在不涉及复杂数据结构的一般…

    2022年10月10日
  • psutil包

    psutil包psutil是python自带的包,用来监控内存使用率的importpsutilclassUtilize: def__init__(self): pass #CPU使用率defcpu_utilize(self):try:returnJsonRet(content=psutil.cpu_percent(interv…

  • velocity语法[通俗易懂]

    velocity语法[通俗易懂]一:基本语法:1.#set(#a="a")$a##输出语句时直接写变量的名称即可2.判断语句:#if($a=="a")##判断语句没有括号,也是

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号