在列表中为对象添加属性,Python

2024-04-24 21:09:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文件,每行都有一个对象的属性。我想用空格分隔属性,并将它们添加到我的对象中。我想要一个列表中的对象,但我不能让它工作。我在这行旁边写了一条评论,它没有做我认为它应该做的事情。或者,如果我只传递单词列表,它会将整个列表存储在对象的第一个属性中。

class Brick(object):
    def __init__(self, xopos=None, yopos=None, xcpos=None, ycpos=None, numb=None, prop=None):
        self.xopos = xopos
        self.yopos = yopos
        self.xcpos = xcpos
        self.ycpos = ycpos
        self.numb = numb
        self.prop = prop

bricklist = []

with open('data.txt', 'r') as f:
    data = f.readlines()

for line in data:
    words = line.split()
    bricklist.append(Brick.xopos(words[0])) #line that doesnt work

for i in range(len(bricklist)):
    print (bricklist[i].xopos)

数据很简单

^{pr2}$

我对python非常陌生,而且我发现我的很多实现方法都不起作用,所以如果有任何帮助,我将不胜感激。


Tags: 对象selfnone列表data属性linebrick
2条回答

我建议引入一个函数,它接受一个字符串(在本例中是一行文本)并从中创建一个Brick对象:

class Brick(object):
    def __init__(self, xopos=None, yopos=None, xcpos=None, ycpos=None, numb=None, prop=None):
        self.xopos = xopos
        self.yopos = yopos
        self.xcpos = xcpos
        self.ycpos = ycpos
        self.numb = numb
        self.prop = prop

    @classmethod
    def from_string(cls, s):
        values = [int(v) for v in s.split()]
        return cls(*values)


with open('data.txt', 'r') as f:
    bricklist = [Brick.from_string(line) for line in f]

试试这个:

class Brick(object):
    def __init__(self, values):
        self.xopos = values[0]
        self.yopos = values[1]
        self.xcpos = values[2]
        self.ycpos = values[3]
        self.numb = values[4]
        self.prop = values[5]

bricklist = []

with open('data.txt', 'r') as f:
    for line in f.readlines()
        bricklist.append(Brick(line.split())

for brick in bricklist:
    print (brick.xopos)

将每个属性从一个构造函数中分离出来,而不是将每个属性分别传递给每个对象。在

通过在使用values之前验证values的内容,可以改进__init__方法。在

相关问题 更多 >