猿问

大神求教!!!跪求!!这破问题想得急死人!!

class Fib(object):
    
    def __init__(self, num):
        self.num=num
        self.fibo=[0,1]#这里有个疑问,属性中没有fibo,怎么可以直接定义???而且不定义self.fibo而是定义L之类的就不行,总之要加上self.这是为什么?????
        for i in range(num-2):
            self.fibo.append(self.fibo[-2]+self.fibo[-1])
            #def结束,这里为什么没有return????
    def __str__(self):
        return str(self.fibo)

    def __len__(self):
        return len(self.fibo)
        
f = Fib(10)
print f
print len(f)

self.fibo=[0,1]#这里有个疑问,属性中没有fibo,怎么可以直接定义???而且不定义self.fibo而是定义L之类的就不行,总之要加上self.这是为什么?????

class Fib(object):

    def __call__(self,num):
        L=[0,1]
        for i in range(num-2):
            L.append(L[-2]+L[-1])
        return L
#可是在__call__这里,又可以直接用L,这到底怎么回事,真希望大神帮我详细解答一下,我现在很糊!!
        
f = Fib()
print f(10)


asdhjhg
浏览 1281回答 3
3回答

孤独的小猪

1、属性中没有fibo是可以直接定义的,如果你定义L也是可以的,但是没有意义,因为你定义L的话,后面的代码需要都修改,而加上self这是python约定俗成的写法,在类中,self只能在方法中使用表示该方法的实例属性,也就是每个实例可以设置不同的值而不会相互影响;在方法下不使用self表示是全局变量。2、在__call__这里,L=[0,1]是全局变量,是可以直接使用的。

asd8532

首先init是构造函数,不需要返回值所以不用returndef __init__(self, num):         self.num=num         self.fibo=[0,1]#这里有个疑问,属性中没有fibo,怎么可以直接定义???         #而且不定义self.fibo而是定义L之类的就不行,总之要加上self.这是为什么?????         因为你定义为fibo的话你在其他函数中就不能使用如_str_,他是局部的变量,出了这个函数就被释放了         而定义为self就是属于类的。可以在外面使用
随时随地看视频慕课网APP

相关分类

Python
我要回答