Re: [問題] 有關Class 的__Init__

看板Python作者 (Victor)時間17年前 (2007/10/18 20:22), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《theee (系子)》之銘言: : class Names: : VERSION="1.0" : AUTHOR="theee" : def __init__(self, data=None): : if data == None: : data = [] : else: : self.data_list.append = data 出錯的原因很簡單,因為data_list在這行 根本什麼東西都沒有,你對一個不存在的東西,去對它的成員做存取 當然會出錯,因為那是空中閣樓,一樓都還不在,不可能只蓋二樓 所以做法應該要先指派data_list再存取他的成員 照你這樣看,data_list應該是一個array 所以這樣寫 def __init__(self, data=None): self.data_list = [] .... 還有一個地方有問題就是,假設你的data_list是一個array 但是你卻指派它的append這個成員 self.data_list.append = data 我想你說的問題是出在這裡吧? append通常是拿來加資料的,應該沒人拿來指派吧? 就算是你想改array的行為,也應該是繼承它而不是用這個方法 def add(self, name): self.data_list.append(name) 像這裡就寫對了 : 我想將程式中name1 = Names() : 直接改成name1 = Names("Hello") : 我的想法是其他class觀念一樣 可以直接在建class時對constructor給值 : 但是在python一直會出錯? : 是因為我還有一個self變數嗎? : 是的話我該怎麼改 ? 還有self 不寫會怎樣嗎? : 我照著範例寫可以跑 但我不知道self.data_list為什麼會過編譯 : 因為錯誤訊息是 : AttributeError: Names instance has no attribute 'data_list' : 看起來是這個問題 但為什麼改成name1 = Names("Hello")就掛了 : 多謝各位 -- VICTOR工作室 | PTT遊戲設計版隆重開幕! | 不管是新手老手,程式美工音樂企劃.... URL : http://www.kinmen.info/vic/ | 都歡迎來遊戲設計版參與討論 XD | 戰略高手> C/C++ | GameTopics> Visual Basic 6.0 | GameDesign -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.231.217.42
文章代碼(AID): #175q_x1d (Python)
討論串 (同標題文章)
文章代碼(AID): #175q_x1d (Python)