[英]Why does this recursive function call require 'self'
这是我对反向链表问题的解决方案。 我不明白为什么当我在函数中调用reverseList(head.next)
,除非我包含self
否则会出现错误
#Recursive Solution
def reverseList(self, head: ListNode) -> ListNode:
if not head or not head.next:
return head
p = self.reverseList(head.next)
head.next.next = head
head.next = None
return p
没有自我的错误 -
NameError: name 'reverseList' is not defined
p = reverseList(head.next)
Line 22 in reverseList (Solution.py)
ret = Solution().reverseList(param_1)
Line 45 in _driver (Solution.py)
_driver()
Line 56 in <module> (Solution.py)
有什么建议?
函数reverseList(self, head: ListNode) -> ListNode
实际上是一个方法(它属于一个类)。 self
表示方法访问对象,其中包含对象的状态。 但是,这里的情况并非如此。
因为它是一个类的方法,第一个参数是指那个类的实例。
完全不清楚为什么它是一个方法,因为它反转了一个与自身不同的列表,并且除了该方法之外不使用它自己的任何属性。
这应该也能正常工作:
def reverseList(head: ListNode) -> ListNode:
if not head or not head.next:
return head
p = reverseList(head.next)
head.next.next = head
head.next = None
return p
您可以使用@staticmethod 装饰器,它告诉解释器此方法不需要对象的访问权限。 您也可以在不构造对象的情况下使用它。 实际上,静态方法只是在类中定义的普通函数,主要是为了更好地组织代码 - 对于您的目的,普通函数而不是方法就足够了。
@staticmethod
def reverseList(head: ListNode) -> ListNode:
当你在函数内部使用 self 时,你只需要用你的类对象替换它。
p = Solution.reverseList(head.next)
编辑:实际上在这里,因此您使用的是类实例,而不是特定对象,甚至更好的是类方法。
@classmethod
def reverseList(cls, head: ListNode) -> ListNode:
...
p = cls.reverseList(head.next)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.