加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 10:24:17 所属栏目: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__ (sel

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()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读