来自Java背景,我知道这__str__类似于toString的Python版本(虽然我确实意识到Python是较老的语言)。
__str__
因此,我定义了一个小类以及一个__str__如下的方法:
class Node: def __init__(self, id): self.id = id self.neighbours = [] self.distance = 0 def __str__(self): return str(self.id)
然后,我创建它的一些实例:
uno = Node(1) due = Node(2) tri = Node(3) qua = Node(4)
现在,尝试打印这些对象之一时的预期行为是将打印其关联的值。这也会发生。
print uno
产量
1
但是当我执行以下操作时:
uno.neighbours.append([[due, 4], [tri, 5]])
接着
print uno.neighbours
我懂了
[[[<__main__.Node instance at 0x00000000023A6C48>, 4], [<__main__.Node instance at 0x00000000023A6D08>, 5]]]
我期望的地方
[[2, 4], [3, 5]]
我想念什么?而我在做什么其他值得冒犯的东西呢?:)
Python有两种不同的方式将对象转换为字符串:str()和repr()。打印对象使用str(); 打印包含对象str()的列表将用于列表本身,但会实现各个项目的list.__str__()调用repr()。
str()
repr()
list.__str__()
因此,您还应该覆盖__repr__()。一个简单的
__repr__()
__repr__ = __str__
在课堂结束时,技巧将发挥作用。