python 多重繼承之拓撲排序

2021-08-18 10:43:32 字數 2544 閱讀 6858

在圖論中,拓撲排序(topological sorting)是乙個有向無環圖(dag,directed acyclic graph)的所有頂點的線性序列。且該序列必須滿足下面兩個條件:

例如,下面這個圖:

它是乙個dag圖,那麼如何寫出它的拓撲順序呢?這裡說一種比較常用的方法:

於是,得到拓撲排序後的結果是

下面,我們看看拓撲排序在python多重繼承中的例子

#!/usr/bin/env python3

# -*- coding: utf-8 -*-classa(object):deffoo(self):print('a foo')defbar(self):print('a bar')classb(object):deffoo(self):print('b foo')defbar(self):print('b bar')classc1(a,b):passclassc2(a,b):defbar(self):print('c2-bar')classd(c1,c2):passif__name__=='__main__':print(d.__mro__)

d=d()

d.foo()

d.bar()

首先,我們根據上面的繼承關係構成一張圖,如下

我們執行上面的**,發現print(d.__mro__)的結果也正是這樣,而這也就是多重繼承所使用的c3演算法啦

為了進一步熟悉這個拓撲排序的方法,我們再來一張圖,試試看排序結果是怎樣的,它繼承的內容是否如你所想

#!/usr/bin/env python3

# -*- coding: utf-8 -*-classa(object):deffoo(self):print('a foo')defbar(self):print('a bar')classb(object):deffoo(self):print('b foo')defbar(self):print('b bar')classc1(a):passclassc2(b):defbar(self):print('c2-bar')classd(c1,c2):passif__name__=='__main__':print(d.__mro__)

d=d()

d.foo()

d.bar()

還是先根據繼承關係構乙個繼承圖

最後,我們執行上面的**,發現print(d.__mro__)的結果正如上面所計算的結果

最後的最後,python繼承順序遵循c3演算法,只要在乙個地方找到了所需的內容,就不再繼續查詢

python 多重繼承之拓撲排序

在圖論中,拓撲排序 topological sorting 是乙個有向無環圖 dag,directed acyclic graph 的所有頂點的線性序列。且該序列必須滿足下面兩個條件 例如,下面這個圖 它是乙個dag圖,那麼如何寫出它的拓撲順序呢?這裡說一種比較常用的方法 於是,得到拓撲排序後的結果...

python 多重繼承

python和c 一樣,支援多繼承。概念雖然容易,但是困難的工作是如果子類呼叫乙個自身沒有定義的屬性,它是按照何種順序去到父類尋找呢,尤其是眾多父類中有多個都包含該同名屬性。對經典類和新式類來說,屬性的查詢順序是不同的。現在我們分別看一下經典類和新式類兩種不同的表現 經典類 usr bin pyth...

Python多重繼承

class printa namea printa def set value self,a self.a a def set namea self,namea printa.namea namea def info self print printa s,s printa.namea,self.a...