class?Fib(object):
????
????def?__init__(self,?num):
????????self.num=num
????????self.fibo=[0,1]#這里有個(gè)疑問,屬性中沒有fibo,怎么可以直接定義???而且不定義self.fibo而是定義L之類的就不行,總之要加上self.這是為什么?????
????????for?i?in?range(num-2):
????????????self.fibo.append(self.fibo[-2]+self.fibo[-1])
????????????#def結(jié)束,這里為什么沒有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]#這里有個(gè)疑問,屬性中沒有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,這到底怎么回事,真希望大神幫我詳細(xì)解答一下,我現(xiàn)在很糊!!
????????
f?=?Fib()
print?f(10)
3 回答

孤獨(dú)的小豬
TA貢獻(xiàn)232條經(jīng)驗(yàn) 獲得超302個(gè)贊
1、屬性中沒有fibo是可以直接定義的,如果你定義L也是可以的,但是沒有意義,因?yàn)槟愣xL的話,后面的代碼需要都修改,而加上self這是python約定俗成的寫法,在類中,self只能在方法中使用表示該方法的實(shí)例屬性,也就是每個(gè)實(shí)例可以設(shè)置不同的值而不會(huì)相互影響;在方法下不使用self表示是全局變量。
2、在__call__這里,L=[0,1]是全局變量,是可以直接使用的。

asd8532
TA貢獻(xiàn)143條經(jīng)驗(yàn) 獲得超187個(gè)贊
首先init是構(gòu)造函數(shù),不需要返回值所以不用return
def?__init__(self,?num): ????????self.num=num ????????self.fibo=[0,1]#這里有個(gè)疑問,屬性中沒有fibo,怎么可以直接定義??? ????????#而且不定義self.fibo而是定義L之類的就不行,總之要加上self.這是為什么????? ????????因?yàn)槟愣x為fibo的話你在其他函數(shù)中就不能使用如_str_,他是局部的變量,出了這個(gè)函數(shù)就被釋放了 ????????而定義為self就是屬于類的??梢栽谕饷媸褂?/pre>
添加回答
舉報(bào)
0/150
提交
取消