将\ n添加到__repr__

时间:2019-04-19 03:19:01

标签: python

我正在尝试格式化对象的__repr__,以使其用换行符分隔数组的每个元素。

这是课程:

class Data:
    taskArray = []
    def __init__(self,units):
        self.units = units
    def __repr__(self):
        return str("Units: {0} \n{1}".format(self.units, self.taskArray))

此刻它将像这样打印:

Units: 4
[Element1, Element2, Element3]

我希望它像这样打印:

Units: 4
[Element1,
Element2,
Element3]

我该怎么做?

4 个答案:

答案 0 :(得分:4)

使用str.join

>>> class Data:
...     taskArray = ["foo", "bar"]
...     def __init__(self,units):
...         self.units = units
...     def __repr__(self):
...         return "Units: {0} \n[{1}]".format(self.units, ",\n".join(repr(t) for t in self.taskArray))
... 
>>> print(Data(4))
Units: 4 
[foo,
bar]

答案 1 :(得分:1)

您需要创建一个字符串,其中每个元素都以taskArray列表中的,\n结尾。您可以使用str.join()

将列表中的元素连接成字符串
class Data:

    def __init__(self,units, taskArray):
        self.units = units
        self.taskArray = taskArray
    def __repr__(self):
        taskArrayStr = ',\n'.join([str(task) for task in self.taskArray])
        return str("Units: {0} \n[{1}]".format(self.units, taskArrayStr))

d = Data(4, ['Element1', 'Element2', 'Element3'])
print(d)
d = Data(4, [1, 'Element2', 3.0])
print(d)

您的输出将是

d = Data(4, ['Element1', 'Element2', 'Element3'])
print(d)
#Units: 4 
#[Element1,
#Element2,
#Element3]
d = Data(3, [1, 'Element2', 3.0])
print(d)
#Units: 3 
#[1,
#Element2,
#3.0]

答案 2 :(得分:1)

我认为最好的方法是:

class Data:
    taskArray = ['foo', 'bar']
    def __init__(self,units):
        self.units = units
    def __repr__(self):
        return "Units: {0} \n[{1}]".format(self.units, ',\n'.join(map(str, self.taskArray)))
print(Data(4))

输出:

Units: 4 
[foo,
bar]

答案 3 :(得分:0)

到目前为止,最简单的方法是使用pprint模块。您应该使用它来漂亮地打印任意对象,除非您需要不支持的特定输出格式。