1 python類的繼承
在oop(object oriented programming)程式設計中,當我們定義乙個class的時候,可以從某個class繼承,新的class稱為子類(subclass),而被繼承的class稱為基類/父類/或者超類(base class/super class)
class add_base():
def __init__(self,a,b):
self.a=a
self.b=b
def sum(self,c):
return self.a+self.b+c
class add_sub(add_base):
def sum(self,m,n):
return self.a+self.b+m-n
b=add_sub(1,3)
summary=b.sum(1,2)
print(summary)
而我們編寫 add_sub 類,完全可以繼承 add_base 類(add_sub 就是 add_base);使用 class add_sub(add_base):來表示繼承;
繼承有什麼好處?最大的好處是子類獲得了父類的全部屬性及功能。如下 add_sub類就可以直接使用父類的 add_base 方法
例項化add_sub的時候,子類繼承了父類的建構函式,就需要提供父類要求的兩個屬性變數:
在繼承關係中,如果乙個例項的資料型別是某個子類,那它也可以被看做是父類(add_sub既是 子類 又是 父類)。但是,反過來就不行(add_base 僅是 父類,而不是子類)。
繼承還可以一級一級地繼承下來,就好比從爺爺到爸爸、再到兒子這樣的關係。而任何類,最終都可以追溯到根類object,這些繼承關係看上去就像一顆倒著的樹。比如如下的繼承樹:
2 類的多型
當子類和父類都存在相同的函式方法時,子類的函式 覆蓋了父類的 方法,在**執行時,會呼叫子類的函式方法這樣,我們就獲得了繼承的另乙個好處:多型。
多型的好處就是,當我們需要傳入更多的子類,例如新增 teenagers、grownups 等時,我們只需要繼承父類的型別就可以了,而函式方法既可以直不重寫(即使用person的),也可以重寫乙個特有的。這就是多型的意思。呼叫方只管呼叫,不管細節,而當我們新增一種子類時,只要確保新方法編寫正確,而不用管原來的**。這就是著名的「開閉」原則:
請看上面**:我們修改了sum函式方法,最終我們採用了子類的方法,將父類進行覆蓋
3 子類從新寫建構函式
class add_base():
def __init__(self,a,b):
self.a=a
self.b=b
def sum(self,c):
return self.a+self.b+c
class add_sub(add_base):
def __init__(self,a,b,k):
self.a=a
self.b=b
self.k=k
def sum(self,m,n):
return self.a+self.b+m-n+self.k
b=add_sub(1,2,3)
summary=b.sum(1,2)
print(summary)
也可以這樣寫:
class add_base():
def __init__(self,a,b):
self.a=a
self.b=b
def sum(self,c):
return self.a+self.b+c
class add_sub(add_base):
def __init__(self,a,b,k):
add_base.__init__(self,a,b)
self.k=k
def sum(self,m,n):
return self.a+self.b+m-n+self.k
b=add_sub(1,2,3)
summary=b.sum(1,2)
print(summary)
參考部落格: python類例項屬性,例項方法, 繼承, 多繼承
coding utf 8 import requests class spider name 豬八戒 def init self,url 類初始化方法,例項化類最先呼叫,可直接通過類名呼叫 self.target url target 即為例項化屬性 例項化後的屬性可以被例項化物件訪問,也可以被例項...
python 類繼承與子類例項初始化
init 方法介紹 如果其基類也具有 init 必須顯式地在 init 呼叫它,以保證能夠適當地初始化它的基類部分 例如 baseclass.init self,args.作為構造器的特殊情況,它沒有值被返回,如果返回某個值,會在執行時丟擲異常typeerror.1.子類定義了 init 方法時若未...
python類的繼承鏈例項分析
1 子類可以繼承父類,同樣,父類也可以繼承自己的父類,一層一層地繼承。class a def h e self print程式設計客棧 i h a an apple class b a pass class c b pass 2 如果想判斷乙個類別是否是另乙個類別的子類別,可以使用內建函式issub...