对Python列表中的__str__感到困惑

发布于 2021-01-29 19:37:00

来自Java背景,我知道这__str__类似于toString的Python版本(虽然我确实意识到Python是较老的语言)。

因此,我定义了一个小类以及一个__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]]

我想念什么?而我在做什么其他值得冒犯的东西呢?:)

关注者
0
被浏览
125
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    Python有两种不同的方式将对象转换为字符串:str()repr()。打印对象使用str();
    打印包含对象str()的列表将用于列表本身,但会实现各个项目的list.__str__()调用repr()

    因此,您还应该覆盖__repr__()。一个简单的

    __repr__ = __str__
    

    在课堂结束时,技巧将发挥作用。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看