"""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...