Por que algumas seqüências de caracteres do Python são impressas com aspas e algumas são impressas sem aspas?

Eu tenho um problema com representações de string. Eu estou tentando imprimir meu objeto e às vezes recebo aspas simples na saída. Por favor, ajude-me a entender por que isso acontece e como posso imprimir o objeto sem aspas.

Aqui está o meu 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)

Aqui está o que eu faço:

from Tree import Tree
t = Tree('X', Tree('Y','y'), Tree('Z', 'z'))
print t

Aqui está o que eu recebo:

(X (Y 'y') (Z 'z'))

Aqui está o que eu quero pegar:

(X (Y y) (Z z))

Por que as cotações aparecem em torno dos valores dos nós terminais, mas não em torno dos valores de não terminais?

questionAnswers(1)

yourAnswerToTheQuestion