如何获取存储在内存中而不是内存对象中的值

How to Get Value Stored in Memory Instead of Memory Object

我正在学习图,并且有一个简单的图 Class,其中包含节点和边对象。每条边都有一个值 Node_From 和 Node_To。然而,当我去打印一个边缘列表时,值作为我想要的整数出现,但是 Node_From 和 Node_To 值作为内存对象出现。 如何获取那个内存对象存储的值?下面是相关代码,然后输出。

class Node(object):
    def __init__(self, value):
        self.value = value
        self.edges = []

class Edge(object):
    def __init__(self, value, node_from, node_to):
        self.value = value
        self.node_from = node_from
        self.node_to = node_to

class Graph(object):
    def __init__(self, nodes=[], edges=[]):
        self.nodes = nodes
        self.edges = edges

    def get_edge_list(self):
        """Don't return a list of edge objects!
        Return a list of triples that looks like this:
        (Edge Value, From Node Value, To Node Value)"""
        triples = []
        for edge in self.edges:
            triples.append((edge.value, edge.node_from, edge.node_to))
        return triples

print(graph.get_edge_list()) 的输出:

[(100, , , (101, , ), (102, , ), (103, , )]

100101102 等是我想要并更正的值,但我还想要 node_from 和 node_to 每个 Edge 对象的部分,而不是每个对象的内存位置。如何将 <graph_representation.Node object at 0x7ffbee5f7750> 转换为存储在该内存位置的任何值?谢谢!

您看到的是未覆盖 str() 方法或 repr[=19= 的对象的默认输出]() 方法。

你可以通过将此添加到你的节点来获得你想要的东西 class:

class Node(object):
    def __init__(self, value):
        self.value = value
        self.edges = []
    def __str__(self):
        return self.value

请记住,每次打印时都会发生这种情况,有时您可能想要区分具有相同值的 2 个节点。

将@jasonharper 的评论转为答案,方便大家参考。

问题在于将 edge.node_fromedge.node_to 添加到列表中。这些是对节点对象的引用,因此它们 return 内存位置。我们需要添加 edge.node_from.valueedge.node_to.value 以从这些节点而不是内存对象中获取值。因此该方法解析为:

def get_edge_list(self):
        """Don't return a list of edge objects!
        Return a list of triples that looks like this:
        (Edge Value, From Node Value, To Node Value)"""
        triples = []
        for edge in self.edges:
            triples.append((edge.value, edge.node_from.value, edge.node_to.value))
        return triples

这 returns 的预期输出:

[(100, 1, 2), (101, 1, 3), (102, 1, 4), (103, 3, 4)]

谢谢大家的帮助!