8

文字列表現に問題があります。オブジェクトを印刷しようとしていますが、出力に一重引用符が表示されることがあります。なぜそれが起こるのか、引用符なしでオブジェクトを印刷する方法を理解するのを手伝ってください。

これが私のコードです:

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)

これが私がすることです:

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

ここに私が得るものがあります:

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

これが私が取得したいものです:

(X (Y y) (Z z))

終端ノードの値の周りに引用符が表示されるのに、非終端の値の周りに表示されないのはなぜですか?

4

1 に答える 1

15

repr文字列に引用符を付けますが、引用符は付けstrません。例えば:

>>> s = 'foo'
>>> print str(s)
foo
>>> print repr(s)
'foo'

試す:

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)

代わりは。

于 2013-06-18T14:47:54.253 に答える