12. 繼承 - 覆寫父親的方法

子類別可以使用相同的方法名稱而覆寫(override)繼承自父親的方法。當一個子類別實體呼叫與父親相同名稱的方法時,被呼叫的是子類別的方法。

(1) 「低溫運費」繼承「運費」

#-------------------
# 父類別, 運費
#-------------------
class Trans():
    def __init__(self, size):
        self.__size = size
        
    @property
    def size(self):
        return self.__size
    
    @size.setter
    def size(self, size):
        self.__size = size
    
    def price(self):
        if self.size < 60:
            return 130
        elif self.size < 90:
            return 170
        elif self.size < 120:
            return 210
        elif self.size < 150:
            return 250
        else:
            raise ValueError('此包裹尺寸不能運送')
       
#-----------------------
# 子類別, 低溫運費
#-----------------------        
class ColdTrans(Trans):
    def __init__(self, size):
        super().__init__(size)
    
    #覆寫父親的price()方法    
    def price(self):
        if self.size < 60:
            return 160
        elif self.size < 90:
            return 225
        elif self.size < 120:
            return 290        
        else:
            raise ValueError('此低溫包裹尺寸不能運送')

第36行的price()覆寫(override)了父親的price()方法。

以下是一個使用它們的例子:

#產生一個運費物件
t = Trans(65)
print(f'{t.price()}元')  

#產生一個低溫運費物件
c = ColdTrans(65)
print(f'{c.price()}元')  #呼叫兒子的price()方法

執行結果:

170元 225元

說明:

問題:

請以以上的例子為基礎,再增加1個「離島運費」類別,名稱是「IslandTrans」。「離島運費」也繼承「運費」,它有1個建構元以設定包裹尺寸,另有一個price()方法以計算運費。當尺寸小於60時,運費為220元;當尺寸小於90時,運費為280元;當尺寸小於120時,運費為320元;當尺寸小於150時,運費為360元;尺寸超過150是一種錯誤。

請產生以下「離島運費」實體並印出其運費: 50 65 100 140 200