¿Por qué algunas cadenas de Python se imprimen con comillas y algunas se imprimen sin comillas?

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.