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

Posted ucasljq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()

 

以上是关于python进阶四(类的继承)4-4 python中多重继承的主要内容,如果未能解决你的问题,请参考以下文章

python进阶四(类的继承)4-1 python中继承一个类

python进阶四(类的继承)4-5 python中获取对象信息

Python学习之旅—面向对象进阶知识:类的命名空间,类的组合与继承

面向对象之进阶继承

Python学习笔记-面向对象进阶封装多态继承

廖雪峰老师——Python进阶( 类的继承 )