繼承(Inheritance)
- 與其他物件導向語言相同,Python也有著繼承(Inheritance)的機制
基本語法:
class DerivedClass(BaseClass): <statement-start> . . . <statement-end>
其中,基礎類別(BaseClass)是必須在子類別(DerivedClass)清楚定義的,表示這個子類別的來源是哪一個類別,子類別中的方法(method)可以覆蓋(override)其基礎類別的所有方法。
- 多重繼承
有繼承,當然有多重繼承可以使用,方法與繼承是相似的。
class DerivedClass(BaseClass1,BaseClass2,BaseClass3): <statement-start> . . . <statement-end>
若是要使用基礎類別的方法的時候有兩種方法,一個是直接呼叫基礎類別的方法並給予參數:
class A: def __init__(self): print('a') self.list = [] def put(self,item): self.list.append(item) class B(A): def __init__(self): A.__init__(self) print('b') def doublePut(self,item): A.put(self,item) self.list.append(item)
但是這樣並沒有綁定基礎類別的內容。
另一個方法是使用super()來呼叫基礎類別的方法:
class A: def __init__(self): print('a') self.list = [] def put(self,item): self.list.append(item) class B(A): def __init__(self): super(B,self).__init__() print('b') def doublePut(self,item): super(B,self).put(item) self.list.append(item)
這樣的好處是能綁定基礎類別。
在Python3中super()可以簡化到不需要參數就可以使用
super(B,self).put(item) = super().put(item)
而Python2中要注意類別必須是繼承於基礎類別object。
class A: >> class A(object):
原因在於若不註明繼承object的話將會預設為舊版本的類別(type = classobj)
而super()需要新版本的類別(type = type)