leetcode中.self的作用是什么?

问题描述 投票:0回答:1

我针对 LeetCode 上的第 509 题用 Python 编写了下面的程序,该程序要求用户编写一个程序来查找斐波那契数列中第 n 个数字的值:

class Solution(object):
    def fib(self, n):
        output = 0
        if n == 0:
            output = 0
        elif n == 1:
            output = 1
        else:
            output = fib(n-1) + fib(n-2)
        return(output)

然后我遇到了这个错误:

NameError: global name 'fib' is not defined
    output = fib(n-1) + fib(n-2)
Line 9 in fib (Solution.py)
    ret = Solution().fib(param_1)
Line 30 in _driver (Solution.py)
    _driver()
Line 40 in <module> (Solution.py)

然后我查看了发布的所有解决方案,我注意到所有利用线性递归的解决方案都有一个共同点:它们在调用初始体中的

self.
函数之前都使用
fib()
作为前缀。功能。因此,我将解决方案更改为:

class Solution(object):
    def fib(self, n):
        output = 0
        if n == 0:
            output = 0
        elif n == 1:
            output = 1
        else:
            output = self.fib(n-1) + self.fib(n-2)
        return(output)

错误消失了,LeetCode 接受了我的提交。

奇怪的是,我在IDE中运行了没有

self.
的初始代码,并且没有运行时错误;该程序正在运行。

为什么我必须使用

.self
才能摆脱LeetCode上的运行时错误?

python recursion
1个回答
0
投票

在Python中,关键字

self.
指的是调用该方法的类的实例。 当你想调用同一个类的方法时,你需要使用
self.
来引用要调用该方法的实例。

这就是第一个代码(错误代码)出现错误的原因

NameError: global name 'fib' is not defined
fib()
(没有
self.
)可以称为 全局(类外)函数,而你还没有定义它。

结论:当您需要

调用类函数
时,请使用self.

© www.soinside.com 2019 - 2024. All rights reserved.