因此,在我目前用作参考的书(Problem Solving with Algorithms and Data Structres)中,这就是图表的实现方式。我在这里不明白的是,__str__
类中的Vertex
函数究竟是如何工作的,以及为什么我们需要它。有人可以解释一下吗?谢谢!
class Vertex:
def __init__(self,key):
self.id = key
self.connectedTo = {}
def addNeighbor(self,nbr,weight=0):
self.connectedTo[nbr] = weight
def __str__(self):
return str(self.id) + ' connectedTo: ' + str([x.id for x in self.connectedTo])
def getConnections(self):
return self.connectedTo.keys()
def getId(self):
return self.id
def getWeight(self,nbr):
return self.connectedTo[nbr]
class Graph:
def __init__(self):
self.vertList = {}
self.numVertices = 0
def addVertex(self,key):
self.numVertices = self.numVertices + 1
newVertex = Vertex(key)
self.vertList[key] = newVertex
return newVertex
def getVertex(self,n):
if n in self.vertList:
return self.vertList[n]
else:
return None
def __contains__(self,n):
return n in self.vertList
def addEdge(self,f,t,cost=0):
if f not in self.vertList:
nv = self.addVertex(f)
if t not in self.vertList:
nv = self.addVertex(t)
self.vertList[f].addNeighbor(self.vertList[t], cost)
def getVertices(self):
return self.vertList.keys()
def __iter__(self):
return iter(self.vertList.values())
答案 0 :(得分:3)
一行代码足以提出您的问题:
str(self.id) + ' connectedTo: ' + str([x.id for x in self.connectedTo])
让我们选择那个:
self.id
是您对象的唯一ID。 str()
将其转换为字符串。connectedTo:
然后连接str()
转换由[...]
构造生成的列表。我猜3.给你带来麻烦。它只是一个中心的Pythonic构造,并选择self.connectedTo
序列中的每个元素,取.id
,然后返回这些元素的列表。
之后,你有一个__str__
返回的字符串。由于每当python尝试获取对象的字符串形式时都会调用该方法,因此当您执行类似
print Vertex
答案 1 :(得分:2)
__str__
函数是您尝试对对象进行字符串化时调用的函数,所以
g = Vertex(key)
print str(g) # calls __str__
这可以实现以使打印对象更容易