2015-05-19 20 views
0

python中的方法OverWrite和OverRide之間有什麼區別?python中的方法OverWrite和OverRide有什麼區別?

我在覆蓋和覆蓋的概念有點混亂。假設我有一類

class shape(object): 
    def area(self): 
     print 'Method called from shape' 

class rect(shape): 

    def __init__(self, h, w): 
     self.h = h 
     self.w = w 

    def area(self, h, w): 
     super(rect, self).area() 
     return h + w 

如果我叫超級方法RECT它的面積方法被稱爲重載 ,如果我不叫超,這是overwritting(因爲它正在取代)

什麼我的理解是正確的?

+0

根據我的經驗,在兩種情況下都使用* override *,並且在這種情況下不會使用* overwrite *。 –

+0

你是在談論重寫vs超負荷?我不熟悉術語覆蓋 –

回答

0

我還沒有聽說過覆蓋這個詞。通常會感到困惑的兩個術語是超載和覆蓋,但對於其他語言! Python沒有超載的概念

覆蓋是用子類中的實現替換父類的方法。

在其他結構化語言(如C#或Java)中重載正在創建具有相同名稱但具有不同參數簽名的方法。

您可以創建兩種截然不同的方法都命名get_area:

public get_area(self, width, height){ 
    ... 
} 
public get_area(self, rectangle){ 
    ... 
} 

這是超載的一個例子。你在問題中的例子是重寫。 note重載在python中的功能與在其他語言中的功能不同!在類中定義的相同方法的兩個定義將不可調用。只有具有給定名稱的方法的最後一個實現才能被調用。在上面的例子中,如果用Python編寫,只有get_area(self,rectangle)可以被調用。

+3

在Python中,實際上不能用*相同的名稱創建兩個* distinct *方法(儘管還有其他方法可以實現重載等)。 –

+0

哦,有趣的是,python同時接受重載,並且不會禁用,但是當您嘗試使用第一個重載時,它的行爲就像它不存在一樣。 –

+0

呃,我覺得自己像是一個在黑暗中開車後第一次找到大燈的新司機!謝謝@ThomasOrozco –

相關問題