覆盖方法而不会陷入无限递归

时间:2013-01-07 15:57:17

标签: python methods override

我想在Python中覆盖类dict的方法,一个简单的方法:update。假设我要创建一个与标准MyDict相同的dict类,除了可以使用必须包含至少10个元素的dict进行更新。

所以我会继续:

def update(self, newdict):
    if len(newdict) <= 10: raise Exception
    self.update(newdict)

但是在对update的内部调用中,很明显Python调用了重写函数而不是原始函数。除了简单地更改函数名称之外,有没有办法避免这种情况?

2 个答案:

答案 0 :(得分:4)

您需要在超类上调用update,将子类的实例提供为self

def update(self, newdict):
    if len(newdict) <= 10: raise Exception
    dict.update(self, newdict)

您还可以使用super()在运行时确定超类:

def update(self, newdict):
    if len(newdict) <= 10: raise Exception
    super(MyDict, self).update(newdict)

在Python 3中,您可以省略super()的参数:

def update(self, newdict):
    if len(newdict) <= 10: raise Exception
    super().update(newdict)

答案 1 :(得分:0)

你是从 dict 类继承的吗?使用超级功能

super(MyDict, self).update

应该做的伎俩

相关问题