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

为什么Python类中的递归方法需要使用self指针才能生效?

Python类中递归必须使用self.的原因

我是Python新手,正在用它刷LeetCode题目。在做一道递归题时,发现必须使用self.指针才能让递归正常运行。

我的初始代码如下:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        if not head or not head.next:
            return head
        
        p = reverseList(head.next)
        head.next.next = head
        head.next = None
        
        return p

但这段代码会报错:

NameError: name 'reverseList' is not defined

必须在reverseList()前加上self.才能让代码正常运行。下面解释Python这种表现的原因:

  • Python中类的成员方法是绑定到实例对象上的,不属于全局或局部作用域的普通函数。当你在方法内部直接写reverseList()时,Python会优先在当前局部作用域、然后全局作用域查找这个名称,找不到就抛出NameError。
  • self是当前类实例的引用,self.reverseList明确告诉Python:去当前实例的属性中查找这个方法,而类的成员方法默认会绑定到实例,因此能正确触发递归调用。
  • 对比Java/C++:这两种语言的编译器会在成员方法内部递归时,自动隐式传递当前实例(this指针),所以无需显式写出this.也能找到方法。但Python没有这种隐式处理逻辑,必须显式通过self引用实例方法。
  • 类外函数的情况:如果函数定义在类外部,它属于全局或局部作用域的普通函数,递归时直接写函数名,Python能在对应作用域中找到该函数,因此不需要self.。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:20:34