繼承(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)