python中对象的字符串表示

String representation of an object in Python

本问题已经有最佳答案,请猛点这里访问。

因此,在我目前用作参考的书(用算法和数据结构解决问题)中,这是如何实现图的。这里我不明白的是,类Vertex中的__str__函数在这里是如何工作的,以及为什么我们需要它。有人能解释一下吗?谢谢您!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
 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())


一行代码就足够问你问题了:

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

让我们把它分开:

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

    之后,您将得到一个字符串,__str__将返回该字符串。因为每当Python试图获取对象的字符串形式时都会调用该方法,所以在执行类似的操作时可能会调用该方法。

    1
    print Vertex

    __str__函数是试图将对象串接时调用的函数,因此

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

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