python进阶四(类的继承)【4-4 python中多重继承】

python中多重继承

除了从一个父类继承外,Python允许从多个父类继承,称为多重继承。

多重继承的继承链就不是一棵树了,它像这样:

 1 class A(object):
 2     def __init__(self, a):
 3         print ‘init A...‘
 4         self.a = a
 5
 6 class B(A):
 7     def __init__(self, a):
 8         super(B, self).__init__(a)
 9         print ‘init B...‘
10
11 class C(A):
12     def __init__(self, a):
13         super(C, self).__init__(a)
14         print ‘init C...‘
15
16 class D(B, C):
17     def __init__(self, a):
18         super(D, self).__init__(a)
19         print ‘init D...‘

看下图:

像这样,D 同时继承自 B 和 C,也就是 D 拥有了 A、B、C 的全部功能。多重继承通过 super()调用__init__()方法时,A 虽然被继承了两次,但__init__()只调用一次:

多重继承的目的是从两种继承树中分别选择并继承出子类,以便组合功能使用。

举个例子,Python的网络服务器有TCPServer、UDPServer、UnixStreamServer、UnixDatagramServer,而服务器运行模式有 多进程ForkingMixin 和 多线程ThreadingMixin两种。

要创建多进程模式的 TCPServer:

class MyTCPServer(TCPServer, ForkingMixin)
    pass

要创建多线程模式的 UDPServer:

class MyUDPServer(UDPServer, ThreadingMixin):
    pass

如果没有多重继承,要实现上述所有可能的组合需要 4x2=8 个子类。

任务

+-Person
  +- Student
  +- Teacher

是一类继承树;

+- SkillMixin
   +- BasketballMixin
   +- FootballMixin

是一类继承树。

通过多重继承,请定义“会打篮球的学生”和“会踢足球的老师”。

 1 class Person(object):#Person父类
 2     pass
 3
 4 class Student(Person):#继承Person的Student子类
 5     pass
 6
 7 class Teacher(Person):#继承Person的Teacher子类
 8     pass
 9
10 class SkillMixin(object):#SkillMixing父类
11     pass
12
13 class BasketballMixin(SkillMixin):#继承SkillMixing父类的BasketballMixin子类
14     def skill(self):#一个实例,返回basketball这个字符串
15         return ‘basketball‘
16
17 class FootballMixin(SkillMixin):#继承SkillMixing父类的FootballMixin子类
18     def skill(self):#一个实例,返回football这个字符串
19         return ‘football‘
20
21 class BStudent(Student,BasketballMixin):#多重继承Student子类和BasketballMixin子类的BStudent子类
22     pass
23
24 class FTeacher(Teacher,FootballMixin):#多重继承Student子类和BasketballMixin子类的FTeacher子类
25     pass
26
27 s = BStudent()#调用类的方法,赋值给s
28 print s.skill()#调用BStudent子类中的skill实例的方法
29
30 t = FTeacher()
31 print t.skill()

原文地址:https://www.cnblogs.com/ucasljq/p/11625033.html

时间: 2024-10-09 09:19:58

python进阶四(类的继承)【4-4 python中多重继承】的相关文章

python之7-2类的继承与多态

类的继承的意思就如同父子关系一样,这个儿子继承了父亲的一切,但是在某些地方(属性)相同的时候,儿子的属性大于老子的属性(覆盖),最底层类,总会继承最接近它的那个类的属性init 类的多态总是和继承相连的,没有继承,就没有多态一说.一个子类的实例,它即属于这个子类,也属于父类,比如:父亲A和儿子B,儿子B即属于儿子类,也属于人类,但是它不属于父亲类 多态是面向对象语言的一个基本特性,多态意味着变量并不知道引用的对象是什么,根据引用对象的不同表现不同的行为方式.在处理多态对象时,只需要关注它的接口即

Python进阶(四十)-数据可视化の使用matplotlib进行绘图

Python进阶(四十)-数据可视化の使用matplotlib进行绘图 前言 ??matplotlib是基于Python语言的开源项目,旨在为Python提供一个数据绘图包.我将在这篇文章中介绍matplotlib API的核心对象,并介绍如何使用这些对象来实现绘图.实际上,matplotlib的对象体系严谨而有趣,为使用者提供了巨大的发挥空间.用户在熟悉了核心对象之后,可以轻易的定制图像.matplotlib的对象体系也是计算机图形学的一个优秀范例.即使你不是Python程序员,你也可以从文中

Python进阶(四十九)-初识Flask Blueprint

Python进阶(四十九)-初识Flask Blueprint 前言   在进行Python Web开发时选择Flask框架.项目模块划分阶段,使用Blueprint(这里暂且称之为“蓝本”).Blueprint通过把实现不同功能的module分开,从而把一个大的application分割成各自实现不同功能的module.在一个Blueprint中可以调用另一个blueprint的view function, 但要加相应的blueprint名.   Blueprint还有其他好处,其本质上来说就

Python自动化开发课堂笔记【Day07】 - Python进阶(类)- 02

类与对象 对象是特征(变量)与技能(函数)的结合体,类是一系列对象共有的特征与技能的结合体 现实生活中:先有对象,再总结归纳出类 程序中:一定是先定义类,再实例化出对象定义类的语法:class 类名: '''注释''' 类体(可以是任意代码) 1 class Chinese: 2 country = 'China' 3 def __init__(self,name,age): 4 self.name = name 5 self.age = age 6 print('--->',self.name

day14——类的一般形式、Python构造器、类的继承

类的一般形式 创建类我们一般用class关键字来创建一个类,class后面跟类名字,可以自定义,最后以冒号结尾,如下所示: class ClassName: '''类的说明''' 类的内容 类的内容可以写类的全局变量,方法等 下面举个例子: class ren(object): '''this class is abort ren class'''  #类的说明一定要三个引号引起来 name = 'meizi' sex = 'F' def hello(selfself): print('Hell

python面向对象-4类的继承与方法的重载

1.类的继承与方法的重载 上面就是先定义了一个类A,然后由定义了一个类B,B继承了类A,这样B就有了A的非私有属性和方法. 1 class Washer: 2 company='ZBL' 3 def __init__(self,water=10,scour=2): 4 self._water=water #不想让用户直接访问实例变量,可以标志成私有 5 self.scour=scour 6 self.year=2000#这是生产日期 7 #属性包装,将water属性包装成方法,用户使用water

PHP类(四)-类的继承

类的继承就是从已经定义的类中继承数据,也可以重新定义或者加入一些数据. 被继承的类称为父类,基类,超类 继承的类称为子类,派生类 在PHP中只能使用单继承,也就是一个类只能从一个类中继承数据,但是一个类可以有多个子类 <?php class Person{ var $name; var $age; var $sex; function __construct($name="Alex",$age=12,$sex="Male"){ $this->name =

python面向对象(类的继承)

一. 继承的初识 在python3中 所有的类都继承自object class ParentClass1: pass class ParentClass2: pass class ChildClass(ParentClass1):pass #单继承 class ChildClass1(ParentClass1,ParentClass2):pass #多继承 print(ParentClass1.__base__) print(ChildClass.__base__) #会显示该类的一个父类 pr

c++实验四 类的继承、派生和多态

实验目的 1. 理解类的继承和派生机制 2. 掌握派生类的定义和使用 3. 理解和掌握派生类成员的标识和访问中同名覆盖原则.二元作用域分辨符和虚基类的用法 4. 掌握派生类构造函数和析构函数的定义及调用次序 5. 理解运算符重载的目的,掌握运算符重载函数的编写方法 实验内容 一.ElectricCar类 #ifndef BATTERY_H #define BATTERY_H class Battery { public: Battery(int nb = 70); int showbattery