Python 官方文档:入门教程 => 点击学习
python 多重继承之拓扑排序一、什么是拓扑排序 在图论中,拓扑排序(Topological Sorting) 是一个 有向无环图(DAG,Directed Acyclic Graph) 的所有顶点的线性序列。且该序列必须满足下面两个条件
在图论中,拓扑排序(Topological Sorting) 是一个 有向无环图(DAG,Directed Acyclic Graph) 的所有顶点的线性序列。且该序列必须满足下面两个条件:
它是一个DAG图,那么如何写出它的拓扑顺序呢?这里说一种比较常用的方法:
于是,得到拓扑排序后的结果是{1,2,4,3,5}
下面,我们看看拓扑排序在Python多重继承中的例子
二、python 多重继承
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
class A(object):
def foo(self):
print('A foo')
def bar(self):
print('A bar')
class B(object):
def foo(self):
print('B foo')
def bar(self):
print('B bar')
class C1(A,B):
pass
class C2(A,B):
def bar(self):
print('C2-bar')
class D(C1,C2):
pass
if __name__ == '__main__':
print(D.__mro__)
d=D()
d.foo()
d.bar()
运行结果:
(<class '__main__.D'>, <class '__main__.C1'>, <class '__main__.C2'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)
A foo
C2-bar
首先,我们根据上面的继承关系构成一张图,如下
我们执行上面的代码,发现print(D.mro)的结果也正是这样,而这也就是多重继承所使用的C3算法啦
为了进一步熟悉这个拓扑排序的方法,我们再来一张图,试试看排序结果是怎样的,它继承的内容是否如你所想
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
class A(object):
def foo(self):
print('A foo')
def bar(self):
print('A bar')
class B(object):
def foo(self):
print('B foo')
def bar(self):
print('B bar')
class C1(A):
pass
class C2(B):
def bar(self):
print('C2-bar')
class D(C1,C2):
pass
if __name__ == '__main__':
print(D.__mro__)
d=D()
d.foo()
d.bar()
运行结果:
(<class '__main__.D'>, <class '__main__.C1'>, <class '__main__.A'>, <class '__main__.C2'>, <class '__main__.B'>, <class 'object'>)
A foo
A bar
还是先根据继承关系构一个继承图
最后,我们执行上面的代码,发现print(D.mro)的结果正如上面所计算的结果
最后的最后,python继承顺序遵循C3算法,只要在一个地方找到了所需的内容,就不再继续查找
--结束END--
本文标题: python 多重继承之拓扑排序
本文链接: https://lsjlt.com/news/188185.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0