Tengo un problema con las representaciones de cadena. Estoy tratando de imprimir mi objeto y, a veces, obtengo comillas simples en la salida. Ayúdeme a entender por qué sucede y cómo puedo imprimir el objeto sin comillas.
Aquí está mi código:
class Tree: def __init__(self, value, *children): self.value = value self.children = list(children) self.marker = "" def __repr__(self): if len(self.children) == 0: return '%s' %self.value else: childrenStr = ' '.join(map(repr, self.children)) return '(%s %s)' % (self.value, childrenStr)
Esto es lo que hago:
from Tree import Tree t = Tree('X', Tree('Y','y'), Tree('Z', 'z')) print t
Esto es lo que obtengo:
(X (Y 'y') (Z 'z'))
Esto es lo que quiero conseguir:
(X (Y y) (Z z))
¿Por qué aparecen las comillas alrededor de los valores de los nodos terminales, pero no alrededor de los valores de los no terminales?
repr
en una cadena da comillas mientras que str
no. p.ej:
>>> s = 'foo' >>> print str(s) foo >>> print repr(s) 'foo'
Tratar:
def __repr__(self): if len(self.children) == 0: return '%s' %self.value else: childrenStr = ' '.join(map(str, self.children)) #str, not repr! return '(%s %s)' % (self.value, childrenStr)
en lugar.