将对象追加到列表python

时间:2014-04-11 15:32:07

标签: python list class

class paul(list):
    def __init__(self, file, border):
        self.list=[]
        self.file = open(file)
        instance=self.file.readlines()
        instant= instance[1:]
        for i in instant:
            self.list.append(otherclass(i,border))

基本上我正在创建一个类paul,我想要读取文件中的每一行,然后我只想显示除第一行之外的每一行(这就是instant正在做的事情)。然后我想调用otherclass构造函数并传递每一行,并将每个对象追加到self.list

所以,当我说x=paul(file)时,我可以说print x,它将打印包含所有对象的列表。

我发布的声明是正确的,因为当我说print i而不是self.list.append时,它会根据otherclass中指定的格式打印每一行。现在,当我说print x时,它只是打印一个空列表。

2 个答案:

答案 0 :(得分:1)

print paul(file)输出空列表,因为您从paul继承list,但不向其添加任何内容。 试试这个:

class paul(list):

    def __init__(self, file, border):
        self.file = open(file)
        instance = self.file.readlines()
        instant = instance[1:]
        for i in instant:
            # Append to self, since you're inheriting the class
            # from list
            self.append(otherclass(i,border))

<强>更新 要按每个元素的第三项对paul进行排序,只需调用

即可

self.sort(key=lambda x: x[2])

在课堂内。您可以将任何排序谓词指定为key参数。

答案 1 :(得分:0)

更简洁的方法:

class Paul(list):
    def __init__(self, file, border):
        with open(file) as inf:
            # skip first line
            next(self.file, None)
            self.lines = [OtherClass(line, border) for line in inf]

    def __str__(self):
        return "[\n    {}\n]".format(",\n    ".join(str(oc) for oc in self.lines))