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]是全局变量,是可以直接使用的。
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就是属于类的。可以在外面使用
添加回答
举报
0/150
提交
取消