重写方法,而不会陷入无限递归

Overriding methods without falling into infinite recursion

提问人:whatyouhide 提问时间:1/7/2013 更新时间:1/8/2013 访问量:202

问:

我想覆盖 Python 中类的方法,一个简单的方法:.假设我想创建一个与标准相同的类,只是可以使用必须包含至少 10 个元素的 s 来更新它。dictupdateMyDictdictdict

所以我会继续说:

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

但是在内部调用中,显然 Python 调用的是被覆盖的函数,而不是原始函数。除了简单地更改函数名称之外,还有什么方法可以避免这种情况吗?update

Python 方法 重写

评论


答:

4赞 Mattie 1/8/2013 #1

您需要调用超类,以 .updateself

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)
0赞 volcano 1/8/2013 #2

你继承自 dict 类吗?使用超级函数

super(MyDict, self).update

应该可以解决问题

评论

0赞 volcano 1/8/2013
我可能会这样做,但我太累了:-(