python3中supper和繼承順序

2022-01-31 12:40:09 字數 1590 閱讀 9594

"""

supper()

1 實際上返回的的 是父類的例項 所以 在下方類b中的 super(b, self).go() 實際上 super(b, self) 返回的是a的例項 那麼go調的也是a的go方法

2 如果出現了多繼承例如:class d(b,c)的情況 super(d, self).go() 實際上會例項b,c 但是呼叫的時候會先調c的go方法,在調b的go 方法 然後在調d自己的

應該注意 經典類和新式類的 繼承順序 class d 呼叫super(d, self).go() 所以演算法的計算方法為

順序 d----b----a-----c (找到a之後 在從d找c )

這裡有點疑惑的是 為什麼沒有走c----a 這是因為a不是乙個好的節點

好的節點:

如果 a是乙個好的節點 當且僅當搜尋路徑中a之後的節點均不繼承a 例如一下demo

按照深度優先遍歷得到搜尋路徑dbaca 之後python 直譯器 從做往右檢查時發現第三個節點a不是乙個好節點

因為a之後的節點c繼承了a所以 將a從搜尋路徑中移除 所以呼叫順序程式設計了 dbac 打debug也證實了這一點

"""class a(object):

def go(self):

print("in a go")

def stop(self):

print("in a stop")

def pause(self):

raise exception("not implemented")

class b(a):

def go(self):

super(b, self).go()

print("in b go")

def stop(self):

print("in b stop")

class c(a):

def go(self):

super(c, self).go()

print("in c go")

def stop(self):

print("in c stop")

class d(b,c):

def go(self):

super(d, self).go()

print("in d go")

def stop(self):

print("in d stop")

class e(b,c):

pass

if __name__ == '__main__':

a=a()

b=b()

c=c()

d=d()

e=e()

print("*"*120)

a.go()

print("*" * 120)

b.go()

print("*" * 120)

c.go()

print("*" * 120)

print("in d")

d.go()

print(d.__mro__)

print("*" * 120)

e.go()

Python3中bytes和HexStr之間的轉換

在python運算元據內容時,多數情況下可能遇到下面3種型別的資料處理 hexstring 如 1c532145697a8b6f str 如 x1c x53 x21 x45 x69 x7a x8b x6f list 如 0x1c,0x53,0x21,0x45,0x69,0x7a,0x8b,0x6f ...

Python3中is和 的區別?

1.背景 1 變數 記憶體理解 變數 用來標識 identify 一塊記憶體區域。為了方便表示記憶體,我們操作變數實質上是在操作變數指向的那塊記憶體單元。編譯器負責分配。我們可以使用python內建函式id 來獲取變數的位址。變數名 是乙個識別符號 dientify 用來代之一塊記憶體空間,使用這個...

python3中異常處理 Python3異常處理

python的異常處理機制 使用 try.except 捕獲異常 try 業務實現 except error1,error2,as e 出現異常後的處理 異常類的繼承關係 baseexception systemexit keyboardinterrupt generatorexit excepti...