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

2024-04-23 21:36:21 发布

您现在位置: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'

谢谢你


Tags: 对象self列表属性tag错误val方向
3条回答

首先,您需要创建一个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,而不是对象。你知道吗

[]声明了一个列表,所以您的成员变量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'))

直接的问题是您没有实例化TagData__init__中的属性是实例属性(注意用于为实例设置它们的self.前缀),而不是类属性。用这样创建的TagData实例尝试相同的代码:TagData()

更广泛的问题是,我不完全明白你想做什么。没有这些,很难更好地回答你的问题。给你的问题添加更多的上下文会有帮助。你知道吗

相关问题 更多 >