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

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

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

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)
查看完整描述

3 回答

?
孤独的小猪

TA贡献232条经验 获得超302个赞

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

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

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

TA贡献143条经验 获得超187个赞

首先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
  • 3 回答
  • 0 关注
  • 1252 浏览
慕课专栏
更多

添加回答

举报

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