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

