递归列表类型对象中的`__str__`方法问题

时间:2013-03-31 23:53:58

标签: python list python-3.x

我试图创建一个基本上是列表但具有额外功能的对象。当我使用它(例如通过打印)我想要一个自定义显示。例如:

class MyList(list):
    def __init__(self, name, arg):
        self.name=name
        super().__init__(arg)
    def __str__(self):
        return "{0}: {1}".format(self.name,self[:])
if __name__=="__main__":
    B = MyList("george",range(3))
    A = MyList("bernadett",range(5,0,-1))
    B.append(A)
    A.append(B)
    print(B)

打印出george: [0, 1, 2, [5, 4, 3, 2, 1, [0, 1, 2, [...]]]] 我希望它在进入列表之前始终打印Mylist的名称,我宁愿将递归深度限制为1,而是应该只打印名称并保留它。

所以我希望像:George: [0, 1, 2, Bernadette: [5, 4, 3, 2, 1, George:]]

另外,每当我尝试改变列表类型对象的__repr__时,我都会得到无限循环而且我不知道为什么。

感谢。

1 个答案:

答案 0 :(得分:2)

使用父代表:

def __repr__(self):
    return "{0}: {1}".format(self.name, super().__repr__())

您必须将其定义为__repr__方法,因为在列表中它是用于打印其中元素的那个。

这样做,上面的代码将导致:

george: [0, 1, 2, bernadett: [5, 4, 3, 2, 1, george: [...]]]