【问题标题】:Why i get <__main__.Node object at 0x000001EF886AB2E0> when i output Node's name? [duplicate]为什么我在输出节点名称时在 0x000001EF886AB2E0> 处得到 <__main__.Node 对象? [复制]
【发布时间】:2022-01-07 08:44:21
【问题描述】:
class Node():
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

def search1(root, value):
    if root is None or root.val == value:
        return root

    if root.val > value:
        return search1(root.left, value)

    if root.val < value:
        return search1(root.right, value)

def search2(root, value):
    while root != None and root.val != value:
        if root.val > value:
            root = root.left
        elif root.val < value:
            root = root.right
            return root


if __name__ == '__main__':
    a = Node(15)
    b = Node(6)
    c = Node(18)
    d = Node(4)
    e = Node(8)
    f = Node(17)
    g = Node(20)
    h = Node(13)
    i = Node(9)
    a.left = b
    a.right = c
    b.left = d
    b.right = e
    c.left = f
    c.right = g
    e.right = h
    h.left = i

    print(search1(a, 13))
    print(search2(a, 13))

输出:&lt;__main__.Node object at 0x000001EF886AB2E0&gt;

如何将这个 Node() 的地址转换为 Node() 的名称?

【问题讨论】:

  • “节点名称”是什么意思?您打印了一个 Node 对象,这是继承自 object.__repr__ 的对象的默认字符串表示形式
  • 你的节点甚至没有名字。有val,left和right,但没有名字。

标签: python


【解决方案1】:

要么简单地通过

a) 访问打印属性

print(search1(a, 13).val)
print(search2(a, 13).val)

或 b) 通过覆盖 Node 类中的 __str____repr__ 方法。前者用于更多人类可读的输出(例如,在 GUI 中),而后者更多用于技术/开发相关的输出

class Node():
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None
    def __str__(self):
        return str(self.val)
    def __repr__(self):
        return 'Node: ' + str(self.val)

__str__ 被内置的print 函数或str 函数使用。如果未定义,它们会退回到__repr____repr__ 也被 python 命令行使用,并被内置的repr 函数使用。

print的输出:

15

Python CLI 中的输出:

$ python3
from <your-module-name-here> import Node
a = Node(15)
>>> print(a)
15
>>> a
Node: 15

【讨论】:

    猜你喜欢
    • 2021-08-10
    • 2021-01-09
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 2022-12-06
    • 1970-01-01
    相关资源
    最近更新 更多