Python中对象的字符串表示形式

时间:2015-08-09 22:47:41

标签: python

因此,在我目前用作参考的书(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())

2 个答案:

答案 0 :(得分:3)

一行代码足以提出您的问题:

str(self.id) + ' connectedTo: ' + str([x.id for x in self.connectedTo])

让我们选择那个:

  1. self.id是您对象的唯一ID。 str()将其转换为字符串。
  2. 我们连接connectedTo:然后连接
  3. str()转换由[...]构造生成的列表。
  4. 我猜3.给你带来麻烦。它只是一个中心的Pythonic构造,并选择self.connectedTo序列中的每个元素,取.id,然后返回这些元素的列表。

    之后,你有一个__str__返回的字符串。由于每当python尝试获取对象的字符串形式时都会调用该方法,因此当您执行类似

    的操作时可能会调用该方法
    print Vertex
    

答案 1 :(得分:2)

__str__函数是您尝试对对象进行字符串化时调用的函数,所以

g = Vertex(key)
print str(g) # calls __str__

这可以实现以使打印对象更容易