7

I have a problem with string representations. I am trying to print my object and I sometimes get single quotes in the output. Please help me to understand why it happens and how can I print out the object without quotes.

Here is my code:

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) 

Here is what I do:

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

Here is what I get:

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

Here is what I want to get:

(X (Y y) (Z z)) 

Why do the quotes appear around the values of terminal nodes, but not around the values of non-terminals?

1
  • OK, I found the explanation why repr(x) produces strings in quotes here Commented Jun 18, 2013 at 14:56

1 Answer 1

15

repr on a string gives quotes while str does not. e.g.:

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

Try:

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) 

instead.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.