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

Python重写方法内部调用自身的可行性及调用对象疑问

问题解答

疑问1:能否在方法内部调用自身?

当然可以。在Python类的方法里,你完全可以通过self.append(item)这类写法调用自身方法,这种操作在递归逻辑、需要复用当前方法逻辑的场景中很常见。但要注意添加终止条件,避免无限递归——比如如果你的append方法里无限制地调用self.append(item),程序会因栈溢出报错。

疑问2:若可以,会调用容器的原方法还是重写后的方法?

会调用你重写后的方法。因为self指向的是当前类(ListSorter)的实例,当通过self.append()调用时,Python会按照方法解析顺序(MRO)优先查找当前类中定义的方法,也就是你重写的版本,而非父类的原方法。

举个直观的例子,要是你把ListSorter的append方法写成这样:

def append(self, item):
    self.append(item)  # 此处调用的是重写后的append,会触发无限递归

运行后会直接抛出RecursionError,这也能证明调用的是重写后的方法。

额外补充:你代码里用super().append(item)是明确调用父类UserList的原append方法,而self.data.append(item)是直接操作UserList内部维护的列表属性,这两种方式和调用自身方法的逻辑完全不同。

内容的提问来源于stack exchange,提问作者Seung-woo Eric Seo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:08:13