美文网首页
35-python中多重继承

35-python中多重继承

作者: mingminy | 来源:发表于2017-12-22 13:22 被阅读0次

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

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

class A(object):    def __init__(self, a):        print 'init A...'        self.a = aclass B(A):    def __init__(self, a):        super(B, self).__init__(a)        print 'init B...'class C(A):    def __init__(self, a):        super(C, self).__init__(a)        print 'init C...'class D(B, C):    def __init__(self, a):        super(D, self).__init__(a)        print 'init D...'

看下图:

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

>>> d = D('d')

init A...

init C...

init B...

init D...

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

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

要创建多进程模式的TCPServer

class MyTCPServer(TCPServer, ForkingMixin)

pass

要创建多线程模式的UDPServer

class MyUDPServer(UDPServer, ThreadingMixin):

pass

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

相关文章

  • 35-python中多重继承

    除了从一个父类继承外,Python允许从多个父类继承,称为多重继承。 多重继承的继承链就不是一棵树了,它像这样: ...

  • [读] JS中的call()和apply()方法

    JS中的call()和apply()方法 实现继承 多重继承

  • 慕课网-C++远征之继承篇(下)-学习笔记

    C++远征之继承篇(下) 多继承与多重继承 多重继承: 多继承: 如果不写,那么系统默认为private继承 多重...

  • 面向对象高级编程(二)-多重继承&定制类

    多重继承 继承是面向对象编程的一个重要方式,通过继承,子类可以扩展父类的功能。 在python中,可以通过多重继承...

  • Java中关于多重继承的问题

    多重继承的含义 一.用接口实现多重继承 二.用内部类实现多重继承

  • 浅谈Solidity: 13. 继承

    solidity中的继承(inheritance),包括简单继承,多重继承,以及修饰器(modifier)和构造函...

  • C++11 @5

    类的派生和继承 Java 中虽然没有类的多重继承,但一个类可以实现多个接口,这其实也算是多重继承了。相比 Java...

  • 4.0 C++远征:多继承和多重继承

    5-1多继承和多重继承 1.多重继承 线性继承两次及其以上为多重继承。 2.多继承 一个派生类同时有多个基类。

  • c++虚继承

    什么时候用到虚继承 虚继承和虚函数是完全无相关的两个概念。 虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继...

  • 面向对象

    类的定义方法 子类的定义 多重继承 python允许多重继承。

网友评论

      本文标题:35-python中多重继承

      本文链接:https://www.haomeiwen.com/subject/ziitgxtx.html