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

标签 python methods overriding

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

所以我会这样继续:

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

但在 update 的内部调用中,显然 Python 调用了重写函数而不是原始函数。除了简单地更改函数名称之外,是否有其他方法可以避免这种情况?

最佳答案

您需要在父类(super class)上调用update,提供子类的一个实例作为self

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

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

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)

关于python - 覆盖方法而不陷入无限递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14199436/

相关文章:

python - python 3.5 中的 json.loads 和 Redis

scala - Scala中的fun和fun()有什么区别?

java - 子类构造函数方法可以覆盖父类(super class)构造函数吗? "java"

javascript - 如何在 Nodejs 中定义变量并在函数外使用它

python - 无法在 Ubuntu 上使用 pip 安装 Rodeo

Javascript动态地将函数附加到对象

css - 两个连续调用的样式表中的第二个能否覆盖第一个中定义的所有样式?

java - 我应该将 Java/Android 中的所有参数设置为 final 吗?

python - 为什么我没有收到字典的属性 '__getitem__' 错误?

java - 为什么我不能从另一个方法中访问一个方法