为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

asdhjhg 2017-03-15 15:00:27
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)


查看完整描述

2 回答

?
孤独的小猪

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

2、在__call__这里,L=[0,1]是全局变量,是可以直接使用的。

查看完整回答
1 反对 回复 2017-03-17
?
asd8532

首先init是构造函数,不需要返回值所以不用return

def __init__(self, num):
        self.num=num
        self.fibo=[0,1]#这里有个疑问,属性中没有fibo,怎么可以直接定义???
        #而且不定义self.fibo而是定义L之类的就不行,总之要加上self.这是为什么?????
        因为你定义为fibo的话你在其他函数中就不能使用如_str_,他是局部的变量,出了这个函数就被释放了
        而定义为self就是属于类的。可以在外面使用
查看完整回答
1 反对 回复 2017-03-15

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信