2010-08-29 34 views
0

我對python仍然很陌生,一直在玩這個遊戲一段時間,希望有人指出我要出錯的地方。構建python中的類對象列表的問題

基本上我試圖建立一個包含許多不同對象的列表,每個對象都有幾個屬性。基本上我爲這個對象構建了一個類,它包含多個值,然後嘗試構建一個包含這些對象的列表 - 它看起來並沒有在任何地方取得成功!

任何建議將不勝感激。

class TagData(object): 
    def __init__(self): 
     self.tag = [] 
     self.val = [] 
     self.rel = [] 
     self.database = [] 
     self.description = [] 

tagvalue='xxx' 
tagList=[] 
tagList.append(TagData.tag(tagvalue)) 
tagList.append(TagData.val(val1)) 

目前我正在一個錯誤說對tagdata有沒有屬性「標籤」

感謝,

+0

您的縮進看起來不對。當你發佈它時,它是否會受到損壞?否則,我看不出口譯員會怎麼做。 – MAK 2010-08-29 18:10:04

回答

1

首先,你需要創建對tagdata的實例,就像這樣:

TagData() 

這就是爲什麼你得到AttributeError的,因爲當你使用TagData.tag(...),你真的試圖調用TagData類對象的標記方法,而不是設置特定實例的屬性。

接下來,您需要指定屬性或創建一個方法來設置它。例如,你可以像這樣添加一個方法到類:

def addVal(self,value): 
    self.val.append(value) 

然後:

a=TagData() 
a.addVal('value') 
tagList.append(a) 

或者你可以做到這一點(如果你不希望定義getter/setter方法):

a=TagData() 
a.val.append('text') 
tagList.append(a) 

不要做這一切在同一行,因爲當你調用addVal,它將返回無 - 然後你將追加無到您的列表,而不是你的對象。

+0

感謝大家的評論 - 我爲課堂添加了一個addVal,並做了一些其他更改,它的工作非常完美! – anthr 2010-08-29 18:31:20

0

[]聲明的清單,讓您的成員變量的標籤,纈氨酸,REL等都是列表值,但它聽起來像是他們真的想成爲標量?因此,嘗試這種在構造函數:

def __init__(self): 
    self.tag = None 
    self.val = None 
    # etc 

然後你會做這樣的事情來創建對象:如果您希望能夠在構造函數調用指定標籤和Val

td = TagData() 
td.tag = tagvalue 
td.val = 'foo' 
tagList.append(td) 

,你需要添加構造函數參數。這裏有一種方法:

def __init__(self, tag=None, val=None): 
    self.tag = tag 
    self.val = val 
    # etc 

然後:

tagList.append(TagData(tag=tagvalue)) 
tagList.append(TagData(val='foo')) 
0

眼前的問題是,你是不是實例TagData__init__中的屬性是實例屬性(注意self.前綴用於爲實例設置它們)而不是類屬性。嘗試使用同樣的代碼,例如TagData創建如此:TagData()

更廣泛的問題是,我不完全明白你想要做什麼。沒有這個,很難更好地回答你的問題。給你的問題添加更多的上下文將有所幫助