標籤:bsp alt class 一點 isp img 結果 順序 bar
前言:
繼承是物件導向的三大特性之一,對於繼承一點要注意一下3點。
一、基本尋找
如果子類繼承了父類,子類的執行個體化對象,沒有的方法和屬性會去父類找
class Parent(object): #父類 def f1(self): print(‘f1‘)class Sub(Parent): #子類 passobj=Sub() #如果子類繼承了父類,子類的執行個體化對象,沒有的方法和屬性會去父類BAR()obj.f1()
View Code
二、多繼承尋找
python中的類支援多繼承,那麼子類去尋找繼承父類的順序是什麼呢?這問題在Java和C#中不會存在,因為它們根本不支援多繼承;
1、python3中的類屬於新式類,首次尋找規則是廣度優先(從左往右找)
class D(B): def f1(self): print(‘D.f1‘)class E(C): def f1(self): print(‘E.f1‘)class F(D,E): passobj=F() # F類繼承D類,廣度優先(從左往右找,首先找到D類的f1方法)obj.f1()#執行結果 D.f1
View Code
2、對應python3的新式類,來說如果父類仍然沒有子類執行個體想要的,會找父類的父類,深度尋找止到最後一個祖先類 ;(留1)
class A(object): def f1(self): print(‘A.f1‘)class B(A): #B類也沒有,F對象不會去A類找,繼續廣度尋找到E類 def f2(self): print(‘B.f1‘)class C(A): def f1(self): print(‘C.f1‘)class D(B): def f2(self): print(‘D.f1‘)class E(C): def f1(self): print(‘E.f1‘)class F(D,E): passobj=F() # F類繼承D類,廣度優先(從左往右找,首先找到D類,D類沒有f1方法,就往上找D的父類B類)obj.f1()#執行結果 E.f1
View Code
三、self是到底誰?
Python物件導向之繼承