python:我在一个类中定义了一个函数,但随后它丢弃了“名称错误,函数未定义”

时间:2012-11-30 04:35:44

标签: python-2.7

我在python 2.7中运行此代码进行练习,但每次都得到相同的错误,无论我如何调用函数fib(n),我不知道为什么它不能得到它。 这是代码:

    #!/usr/bin/python

class fibonacci:

    def fib(self,n):
        a=1
        b=0
        c=0
        count=0
        fibo=list()

        while count < n:
            c = a + b
            fibo.append(n)
            fibo.append(c)
            a = b
            b = c
            count += 1
        return fibo

n=int(raw_input("ingrese n: "))
s = fib(n)
print s

当我运行它时,我收到此错误:

Traceback (most recent call last):
  File "./fib.py", line 22, in <module>
    s=fib(n)
NameError: name 'fib' is not defined
user@debian:~/Documents$ 

请帮助

2 个答案:

答案 0 :(得分:0)

fib()是类fibonacci的一种方法,所以你必须这样称呼它:

s = fibonnaci.fib(n)

如果你只做fib(n),那么解释器正在寻找一个名为'fib'的全局函数,在任何类之外。在这种情况下,因为将它放在一个类中并没有为函数提供任何特定的实用程序,你可以这样做:

def fib(n):
    ...

s = fib(n)

(如果你把它作为命名空间的一种方式放在一个类中,请记住Python使用模块来简化这一点。)

答案 1 :(得分:0)

class fibonacci:

    def fib(self,n):
        a=1
        b=0
        c=0
        count=0
        fibo=list()

        while count < n:
            c = a + b
            fibo.append(n)
            fibo.append(c)
            a = b
            b = c
            count += 1
        return fibo

n=int(raw_input("ingrese n: "))
s =fibonacci().fib(n)#<-- make sure to have fibonacci() before you call .fib() otherwise it will throw an error
print s

你需要的是从它所在的类中调用fib函数。它正在查看常规函数所在的全局范围(一个不在类中)。