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
相关产品推荐
相关产品推荐

