我还是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'
谢谢,
答案 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}}
更广泛的问题是我并不完全明白你想要做什么。没有它,很难更好地回答你的问题。为您的问题添加更多上下文会有所帮助。