返回介绍

01. Python 工具

02. Python 基础

03. Numpy

04. Scipy

05. Python 进阶

06. Matplotlib

07. 使用其他语言进行扩展

08. 面向对象编程

09. Theano 基础

10. 有趣的第三方模块

11. 有用的工具

12. Pandas

多重继承

发布于 2022-09-03 20:46:15 字数 3665 浏览 0 评论 0 收藏 0

多重继承,指的是一个类别可以同时从多于一个父类继承行为与特征的功能,Python 是支持多重继承的:

In [1]:

class Leaf(object):
    def __init__(self, color='green'):
        self.color = color

class ColorChangingLeaf(Leaf):
    def change(self, new_color='brown'):
        self.color = new_color

class DeciduousLeaf(Leaf):
    def fall(self):
        print "Plunk!"

class MapleLeaf(ColorChangingLeaf, DeciduousLeaf):
    pass

在上面的例子中, MapleLeaf 就使用了多重继承,它可以使用两个父类的方法:

In [2]:

leaf = MapleLeaf()

leaf.change("yellow")
print leaf.color

leaf.fall()
yellow
Plunk!

如果同时实现了不同的接口,那么,最后使用的方法以继承的顺序为准,放在前面的优先继承:

In [3]:

class Leaf(object):
    def __init__(self, color='green'):
        self.color = color

class ColorChangingLeaf(Leaf):
    def change(self, new_color='brown'):
        self.color = new_color    
    def fall(self):
        print "Spalt!"

class DeciduousLeaf(Leaf):
    def fall(self):
        print "Plunk!"

class MapleLeaf(ColorChangingLeaf, DeciduousLeaf):
    pass

In [4]:

leaf = MapleLeaf()
leaf.fall()
Spalt!

In [5]:

class MapleLeaf(DeciduousLeaf, ColorChangingLeaf):
    pass

In [6]:

leaf = MapleLeaf()
leaf.fall()
Plunk!

事实上,这个顺序可以通过该类的 __mro__ 属性或者 mro() 方法来查看:

In [7]:

MapleLeaf.__mro__

Out[7]:

(__main__.MapleLeaf,
 __main__.DeciduousLeaf,
 __main__.ColorChangingLeaf,
 __main__.Leaf,
 object)

In [8]:

MapleLeaf.mro()

Out[8]:

[__main__.MapleLeaf,
 __main__.DeciduousLeaf,
 __main__.ColorChangingLeaf,
 __main__.Leaf,
 object]

考虑更复杂的例子:

In [9]:

class A(object):
    pass

class B(A):
    pass

class C(A):
    pass

class C1(C):
    pass

class B1(B):
    pass

class D(B1, C):
    pass

调用顺序:

In [10]:

D.mro()

Out[10]:

[__main__.D, __main__.B1, __main__.B, __main__.C, __main__.A, object]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文