Python 函数本身运行,但在类中不运行 类斐波那契: def fn(数量): 如果将函数更改为类方法(即将其放入类中)时num

Python 函数本身运行,但在类中不运行 类斐波那契: def fn(数量): 如果将函数更改为类方法(即将其放入类中)时num,python,python-3.6,Python,Python 3.6,,则只有该类的对象才能调用该函数。语法如stanleyli所述。也许更清楚一点: 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) Fi

,则只有该类的对象才能调用该函数。语法如stanleyli所述。也许更清楚一点:

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
正如Ignazio已经指出的,这是一个非常糟糕的类使用示例。该类没有属性(与对象关联的数据),使该类更难使用该函数

当您有一组数据和作用于该数据的函数时,最好使用类,其中的组合体现了更高级别的概念。例如,一个具有棋子位置和移动功能的游戏板将是一个很好的类用途


我现在明白了。另请参见教程参考。本质上,iterable是一个包含next(显式)和/或\uuuuuuuuuu(隐式)方法的类。这就是为什么你要从班级结构开始

一旦你做到了这一点,你的主程序将减少到

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

使用
Fibonacci().fn(i)
。这将实例化一个对象,然后调用它的
fn()
方法。这个函数很难放入类中。@IgnacioVazquez Abrams你能解释一下原因吗?当你得到一个解决方案时,请记住投票选出有用的东西,并接受你最喜欢的答案(即使你必须自己写),所以堆栈溢出可以正确地存档这个问题。非常感谢。我理解。我现在也忘记了以前课程的基础知识。我应该创建一个类,它在每次调用next时返回Fib序列中的值。我不知道该怎么做,只是想开始解决这个问题。仍然不完全理解下一步,以及为什么我还需要一个(self)函数。我过一会儿就过桥。谢谢你的帮助啊哈!你需要构建一个生成器或迭代器,而不是一个类。这是我正在观看的视频,标题是“学习编写13个Iterables:List Comprehensions:Generators”。在说明中,他说要创建一个类,每次调用next时返回Fibonacci序列中的值。也许我不需要上课,但他想要一门来解决这个问题。无论如何。再次感谢,我试着投票,但我没有15个代表。没问题;我只是想帮你做你的公民身份。
fib_obj = Fibonacci()
fib_value = fib_obj.fn(i)
for i in Fibonacci(amount):
    print i