如何获取存储在内存中而不是内存对象中的值
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, , )]
100
、101
、102
等是我想要并更正的值,但我还想要 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_from
和 edge.node_to
添加到列表中。这些是对节点对象的引用,因此它们 return 内存位置。我们需要添加 edge.node_from.value
和 edge.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)]
谢谢大家的帮助!
我正在学习图,并且有一个简单的图 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,
100
、101
、102
等是我想要并更正的值,但我还想要 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_from
和 edge.node_to
添加到列表中。这些是对节点对象的引用,因此它们 return 内存位置。我们需要添加 edge.node_from.value
和 edge.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)]
谢谢大家的帮助!