只是想知道在__str__
方法中显示下一个节点的正确方法是什么。请参阅以下代码和结果。看起来有一些内置的递归特性为列表中的每个节点链接__str__
方法。任何人都可以解释为什么以及如何使其正常运行,例如只打印下一个节点的地址。感谢。
class Node(object):
def __init__(self, x):
self.val = x
self.next = None
def __str__(self):
return "Node {}, next is {}".format(self.val, self.next)
a = Node(1)
b = Node(2)
c = Node(3)
a.next = b
b.next = c
print(a)
Node 1, next is Node 2, next is Node 3, next is None
答案 0 :(得分:1)
而不是打印self.next
str
代表,请尝试打印repr
代替:
return "Node {}, next is {!r}".format(self.val, self.next)
结果:
Node 1, next is <__main__.Node object at 0x7f9f10066630>
答案 1 :(得分:0)
这是打印所有节点的原因是因为.format在连接之前将每个输入转换为字符串。为此,它调用下一个节点的__str__
方法并继续循环。
有两种方法可以让它按照您想要的方式行事。在__repr__
方法中,您可以调用!r
,return "Node {}, next is {!r}".format(self.val, self.next)
# or
return "Node {}, next is <__main__.Node object at {}>".format(self.val, hex(id(self.next)))
,也可以使用ID手动获取内存位置,并以您想要的任何方式对其进行格式化。
Node 1, next is <__main__.Node object at 0x1005d7fd0>
这两个导致相同的输出:
var postProcess = new BABYLON.FxaaPostProcess("fxaa", 1.0, null, null, engine, true);