【问题标题】:Python - How to print a list's contents that have class objects inside?Python - 如何打印包含类对象的列表内容?
【发布时间】:2019-01-04 22:32:50
【问题描述】:

我是 Python 新手,在这里没有找到类似的先前问题。 我的问题是如何在这里看到列表node_list 的真实内容,而不是内存地址? (实际上包括 node1、node2 的名称和它的邻居)

class node:
  def __init__(self, name):
    self.name=name
    self.neighbors={}

  def update(self, name, weight):
    if name in self.neighbors:
      self.neighbors[name]=max(int(weight),int(self.neighbors[name]))
    elif self.name==str(name):
      print ("this is prohibited to add a key name as an existed name")
    else:
      self.neighbors[name] = str(weight)

node_list = []

node1 = node('1')
node_list.append(node1)
node1.update('2',10)
node1.update('4',20)
node1.update('5',20)

node2 = node('2')
node_list.append(node2)
node2.update('3',5)
node2.update('4',10)

print(node1.name)        #  That's OK - prints:  1
print(node1.neighbors)   #  That's OK - prints:  {'2': '10', '4': '20', '5': '20'}
print(node_list)         #  Not OK: prints:[<__main__.node object at 0x7f572f860860>, <__main__.node object at 0x7f572f860dd8>]  

【问题讨论】:

    标签: python list class oop object


    【解决方案1】:

    我认为您必须为其类定义中的节点创建一个__str__ 方法。否则,Python 会自动打印内存地址。

    这是一个类似的问题。

    How to print a class or objects of class using print()?

    【讨论】:

    • 谢谢,但我已经看过这个答案,但它与列表内容无关。实施应该不同吗?我应该在 str 方法中写什么使它工作 (print(node_list)) ?
    • 您需要定义 __repr__() 命令。对列表调用 str 命令会返回一个字符串,该字符串由对列表包含的所有对象调用 repr 命令组成,因此您需要使 __repr__() 命令与您的字符串命令相同。希望这有效。很抱歉最初的误导性评论。 @Eli
    猜你喜欢
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多