【发布时间】:2016-10-25 13:30:38
【问题描述】:
有一个新课程。每个实例都包含对下一个实例的引用。
目标是构建__repr__(self) 函数,当每个值都由定义的符号包裹时,它表示具有所有引用元素的类元素。例如# 或*。
像这样的:
****** ****** ******
* 10 * * 20 * * 30 *
****** ****** ******
有一个例子:
class Node:
def __init__(self, value):
self.value = value
self.pointer = None
@pointer.setter
def pointer(self, next_node):
self.pointer = next_node
p1 = Node(10)
p2 = Node(20)
p3 = Node(30)
p1.pointer = p2
p2.pointer = p3
print (p1)
我所做的:
def __str__(self):
ans = "{1} {0} {1}".format(self.value, "*")
wrap = "{0:{1}^{2}}".format("", "*", len(ans))
return "{1}\n* {0} *\n{1}".format(ans, wrap)
但它只适用于一个元素。 为了打印所有引用的元素,我编写了另一个函数:
def show(self):
buf = self
while buf.value:
print(buf)
if buf.pointer:
buf = buf.pointer
else:
break
但它会将每个元素打印在新行上。像这样:
******
* 10 *
******
******
* 20 *
******
******
* 30 *
******
问题是我不知道如何在第一行返回一些缩进并打印接下来的 3 行元素。
问题:
有没有办法构建__repr__() 函数来表示所有引用的元素?
【问题讨论】:
-
您是否将
end = ' '放入所有打印报表中? -
我应该在哪里输入该代码?我使用内置函数
str(self):来表示每个元素。我是通过.format函数实现的。当我进行打印时,此功能同时打印 3 行。如何将 str 函数更改为打印命令?
标签: class python-3.x oop printing