假设我有一个Graph类和一个Vertex类,定义如下
Graph.py
class Graph:
def __init__(self):
self.adjacencyList = {}
def __str__(self):
return str(self.adjacencyList)
def addVetex(self,key,value):
if Vertex(key,value) not in self.adjacencyList:
self.adjacencyList[Vertex(key,value)] = []
Vertex.py
class Vertex:
def __init__(self,key,value):
self.key = key
self.value = value
def __str__(self):
return "Key: ",str(self.key)," Value: ",str(self,value)
def __hash__(self):
return self.key
如果我这样做:
G = Graph()
G.addVetex(1,None)
G.addVetex(2,None)
G.addVetex(1,3)
print G
打印出来{<Vertex.Vertex instance at 0x110295b90>: [], <Vertex.Vertex instance at 0x110295bd8>: []}
但是我期待{"Key:1 Value:None":[]...}
我的问题是我做错了什么?当一个词被打印出来时,为什么它不会尝试调用其键/值的 str 函数?
感谢。
答案 0 :(得分:5)
我相信你想用你当前代码获得你想要的字符串的方法是Vertex.__repr__
,这是python字典用来获取键的字符串表示的方法。
这是一个related stackoverflow答案,阐明了__repr__
和__str__
答案 1 :(得分:1)
Joe的回答是正确的,这是代码的测试版本:
def __repr__(self):
return "Key: "+str(self.key)+" Value: "+str(self.value)
将在Vertex
中实施。同样重要的是返回一个字符串,而不是问题中的元组。
答案 2 :(得分:1)
这样做。请注意添加 repr 方法(以及 str 方法的一点清理)。
class Vertex:
def __init__(self,key,value):
self.key = key
self.value = value
def __str__(self):
return "{Key: "+str(self.key)+" Value: "+str(self.value)+"}"
def __hash__(self):
return self.key
def __repr__(self):
return str(self)
您可以考虑为您的顶点类继承dict。您可以获得dict的所有好处,但可以添加方法以满足您的需求。最简单的版本如下:
class Vertex(dict):
pass
答案 3 :(得分:-1)
你可以这样做:
class Graph(object):
def __str__(self):
return ", ".join("Key: " + str(i.key) + " Value: " + str(i.value) for i in self.adjacencyList)