You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中重写类实例方法遇递归错误,如何正确实现?

解决实例方法重写时的递归错误问题

你遇到的递归错误,是因为重写后的new_size方法里调用self.size()时,实际调用的就是它自己,导致无限循环调用。要解决这个问题,核心是保留原方法的引用,让新方法调用原逻辑而非自身。

以下是两种可行的解决方案:

方案一:提前保存原实例方法的引用(未知类时更通用)

在替换方法前,先把原来的size方法存下来,新方法里直接调用这个保存的引用:

from types import MethodType

class Animal():
    def size(self):
        return 3
bear = Animal()

# 保存原方法的绑定引用
old_size = bear.size

def new_size(self):
    # 调用原方法而非重写后的方法
    return old_size() * 2

bear.size()  # 返回3
bear.size = MethodType(new_size, bear)
bear.size()  # 返回6

方案二:通过类调用原方法(已知类时适用)

如果知道实例所属的类,可以直接通过类调用原方法,绕过实例上重写的方法:

from types import MethodType

class Animal():
    def size(self):
        return 3
bear = Animal()

def new_size(self):
    # 调用类的原始方法,传入self参数
    return Animal.size(self) * 2

bear.size()  # 返回3
bear.size = MethodType(new_size, bear)
bear.size()  # 返回6

如果实例所属的类未知(符合你描述的场景),方案一更通用,因为它不需要依赖类的信息,直接保留了原方法的绑定状态。

内容的提问来源于stack exchange,提问作者Oren Neumann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 20:02:22