¿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?

Respuestas a la pregunta(1)

Su respuesta a la pregunta