2015-08-09 2 views
3

Итак, в книге (Problem Solving with Algorithms and Data Structres), которую я сейчас использую в качестве ссылки, это как реализован график. Здесь я не понимаю, как именно работает __str__ в классе Vertex и зачем нам это нужно. Может кто-нибудь объяснить? Спасибо!Строковое представление объекта в Python

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

Он возвращает строку с некоторой информацией. Что именно вы не понимаете? – davidism

+1

Возникает вопрос: https://stackoverflow.com/questions/1436703/difference-between-str-and-repr-in-python – Cyphase

ответ

2

функция __str__ является то, что называется, когда вы пытаетесь stringify объект, так

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

это может быть реализовано, чтобы сделать объекты легче

3

Одна строка кода хватило бы для печати задайте свой вопрос:

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

Давайте рассмотрим это отдельно:

  1. self.id - это уникальный идентификатор вашего объекта. str() преобразует это в строку.
  2. мы конкатенация connectedTo:, а затем преобразование списка, то
  3. str() генерируемые [...] конструкции.

Я думаю, 3. дает вам проблемы. Это всего лишь центральная конструкция Pythonic и выбирает каждый элемент в последовательности self.connectedTo, принимает .id и возвращает список из них.

После этого у вас есть строка, которая возвращает __str__. Поскольку этот метод вызывается всякий раз, когда python пытается получить строчную форму объекта, он может быть вызван, когда вы делаете что-то вроде

print Vertex