在python中构建类对象列表时出现问题

时间:2010-08-29 17:55:07

标签: 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没有属性'tag'

谢谢,

3 个答案:

答案 0 :(得分:1)

首先,您需要创建一个TagData实例,如下所示:

TagData()

这就是你得到AttributeError的原因,因为当你使用TagData.tag(...)时,你真的试图调用TagData类对象的tag方法,而不是设置特定实例的属性。

接下来,您需要分配属性或创建方法来设置它。例如,您可以在类中添加这样的方法:

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时,它会返回None - 然后你会将None添加到你的列表而不是你的对象。

答案 1 :(得分:0)

[]声明一个列表,所以你的成员变量tag,val,rel等都是列表值,但听起来他们真的想成为标量?所以在构造函数中尝试这个:

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

然后你会做这样的事情来创建你的对象:

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

如果希望能够在构造函数调用中指定tag和val,则需要添加构造函数参数。这是一种方式:

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

然后:

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

答案 2 :(得分:0)

当前的问题是您没有实例化TagData__init__中的属性是 instance 属性(请注意用于为实例设置它们的self.前缀)而不是类属性。尝试使用TagData创建的TagData()实例使用相同的代码:{{1}}

更广泛的问题是我并不完全明白你想要做什么。没有它,很难更好地回答你的问题。为您的问题添加更多上下文会有所帮助。