函数单独运行,但在类中不运行

时间:2017-04-18 23:57:09

标签: python python-3.6

class Fibonacci:
    def fn(num):
        if num <= 0:
            return 0
        if num <= 1:
            return 1

        else:
            Result = fn(num - 1) +fn(num - 2)
            return Result

amount = int(input("How many numbers do you want? : "))

i = 1
while i < amount:
    FibValue = fn(i)
    print(FibValue)
    i += 1

Fibonacci()

以下是我的错误:

File "C:/Users/Carsten/PycharmProjects/untitled/Lesson13.py", line 30, in <module>
class Fibonacci:
File "C:/Users/Carsten/PycharmProjects/untitled/Lesson13.py", line 45, in Fibonacci
FibValue = fn(i)
File "C:/Users/Carsten/PycharmProjects/untitled/Lesson13.py", line 38, in fn
Result = fn(num - 1) +fn(num - 2)
NameError: name 'fn' is not defined

我不太确定为什么我可以自己运行def Fibonacci:function但是只要我把它放在一个类下面就会给我这些错误。我还是一个初学者,并不知道这些错误意味着什么,但即使查找它们也没有多少帮助。任何帮助表示赞赏。我意识到我可以将它作为一个独立的功能使用,但我正处于youtube系列问题的中间我正在观看自学,我不想简单地跳过视频,只看到问题的其余部分的答案。感谢

1 个答案:

答案 0 :(得分:1)

当您将函数更改为类方法(即将其放在类中)时,该类的对象可以调用该函数。语法如 stanleyli 所述。也许更清楚一点:

fib_obj = Fibonacci()
fib_value = fib_obj.fn(i)

正如 Ignazio 已经指出的那样,这是一个非常糟糕的类使用示例。该类没有属性(与对象关联的数据),并且使类仅使更难来使用该函数。

当您拥有一系列作用于该数据的函数时,可以更好地使用类,其中组合体现了更高级别的概念。例如,具有片段位置和移动功能的游戏板可以很好地利用课程。

我现在明白了。另请参阅教程参考here。基本上, iterable Class ,其中包含 next (显式)和/或 __ next __ (隐式)方法。这就是你从类结构开始的原因。

完成后,您的主程序将缩减为

for i in Fibonacci(amount):
    print i