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

标签 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,而应该只打印名称并保留在该位置。

所以我想要这样的东西: 乔治:[0, 1, 2,伯纳黛特:[5, 4, 3, 2, 1,乔治:]]

此外,每当我尝试更改列表类型对象的 __repr__ 时,我都会遇到无限循环,但我不知道为什么。

谢谢。

最佳答案

使用父级表示:

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

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

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

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

关于python - 递归列表类型对象中 `__str__`方法的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15735922/

相关文章:

python - Pandas:有条件的 2 列的累积和

python - Folium Choropleth "key_on"问题

python - Pyside 安装失败(Python 2.7.4)

java - 在 Java 中没有重复且随机顺序的集合

python - 基于索引的python列表中的优雅切片

python - asyncio.run() 不能从正在运行的事件循环中调用

python - 列表列表更改意外地反射(reflect)在子列表中

python - 有条件合并列表中的子列表

python-3.x - 为什么在 python 中允许 for else

python-3.x - Pandas 滚动窗口获取最小值