1. 程式人生 > >python基礎-多繼承

python基礎-多繼承

coding:utf-8
class F:
def func(self): print(‘F’)
class A(F):pass
# def func(self): print(‘A’)
class B(A):
pass
# def func(self): print(‘B’)
class E(F):pass
# def func(self): print(‘E’)
class C(E):
pass
# def func(self): print(‘C’)

class D(B,C):
pass
# def func(self):print(‘D’)

d = D()
#d.func()
print(D.mro())

新式類中的繼承順序 : 廣度優先

class A(object):
def func(self): print(‘A’)

class B(A):
def func(self):
super().func()
print(‘B’)

class C(A):
def func(self):
super().func()
print(‘C’)

class D(B,C):
def func(self):
super().func()
print(‘D’)

b = D()
b.func()
print(B.mro())
2.7
新式類 繼承object類的才是新式類 廣度優先
經典類 如果你直接建立一個類在2.7中就是經典類 深度優先
print(D.mro())
D.mro()

單繼承 : 子類有的用子類 子類沒有用父類
多繼承中,我們子類的物件呼叫一個方法,預設是就近原則,找的順序是什麼?
經典類中 深度優先
新式類中 廣度優先
python2.7 新式類和經典類共存,新式類要繼承object
python3 只有新式類,預設繼承object
經典類和新式類還有一個區別 mro方法只在新式類中存在
super 只在python3中存在
super的本質 :不是單純找父類 而是根據呼叫者的節點位置的廣度優先順序來的

繼續寫作業 :
學生管理系統 登入,識別身份 進階 : 不同檢視不同的選單