【发布时间】:2013-03-31 23:53:58
【问题描述】:
我正在尝试制作一个基本上是列表的对象,但具有额外的功能。当我使用它(例如通过打印它)时,我想要一个自定义显示。例如:
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__ 时,我都会遇到无限循环,我不知道为什么。
谢谢。
【问题讨论】:
-
我认为你的问题可能是格式(self.name,self[:])。 self[:] 可能会导致您的程序调用列表的 str 方法而不是 MyList。看完我写的,觉得很可笑。但是,如果它对您有帮助,我还是想发布它
-
感谢您的帮助,我认为调用切片的 str 会在每个项目上调用 str ......所以 str 用于前几个项目的整数,然后 str 用于最后一个 MyList队列中的项目,我认为这会解决它......但不是那么多。
标签: python list python-3.x