Python 为什么;“未定义功能”;递归情况下的错误?

Python 为什么;“未定义功能”;递归情况下的错误?,python,python-3.x,function,recursion,reverse,Python,Python 3.x,Function,Recursion,Reverse,我想解决一个相反的问题 这是我的递归函数,为什么Python3抱怨我的函数没有定义?有什么想法吗 class Solution: def reverse(self, x: int) -> int: if x < 0: return -1 * reverse(self, x) if x // 10 == 0: return x if x % 10 == 0:

我想解决一个相反的问题

这是我的递归函数,为什么Python3抱怨我的函数没有定义?有什么想法吗

class Solution:
    def reverse(self, x: int) -> int:
        if x < 0:
            return -1 * reverse(self, x)
        if x // 10 == 0:
            return x
        if x % 10 == 0:
            return reverse(self, x // 10)
        else:
            return (x % 10) * 10 ** (len(str(x//10))) + reverse(self, x // 10)
类解决方案:
def反转(自身,x:int)->int:
如果x<0:
返回-1*反向(自身,x)
如果x//10==0:
返回x
如果x%10==0:
反向返回(自,x//10)
其他:
返回(x%10)*10**(len(str(x//10))+反向(self,x//10)

我只是遵循传统的递归函数。

方法需要通过
self
递归调用;类/实例的作用域只能通过
self
(或类名本身)显式访问,不能通过嵌套作用域隐式访问。将
reverse(self,…)
的所有用法更改为
self.reverse(…)
即可使用

您可以执行
Solution.reverse(self,…)
,但这是不必要的反复重复类名,而且无论如何都比直接调用
self.reverse
要慢。

您的
reverse()
是类中的一个方法,因此在代码中简单地说
reverse
是无法访问的。在调用方法时,也不需要将self提供给该方法

暗影游侠的回答给出了如何修复它的说明

这个答案应该让您更仔细地了解未绑定方法和绑定方法之间的区别:


我还建议您阅读一些python类的基本教程。

您的函数应该如下所示:

类解决方案:
def反转(自身,x:int)->int:
如果x<0:
返回-1*自反转(x)
如果x//10==0:
返回x
如果x%10==0:
返回自反转(x//10)
其他:
返回(x%10)*10**(len(str(x//10))+self.reverse(x//10)

您应该使用self调用reverse方法。还有一个错误是,你把自我也当作论点来传递,这是不需要的。因此,代码的正确版本如下所示:

class Solution:
def reverse(self, x: int) -> int:
    if x < 0:
        return -1 * self.reverse(x)
    if x // 10 == 0:
        return x
    if x % 10 == 0:
        return self.reverse(x // 10)
    else:
        return (x % 10) * 10 ** (len(str(x//10))) + self.reverse(x // 10)
class Solution:
    def reverse(self, x: int) -> int:
        x = str(x)
        x = x[::-1]
        x = int(x)
        return x