2015-05-19 162 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 –

相关问题