2013-06-18 38 views
7

Tôi gặp sự cố với biểu diễn chuỗi. Tôi đang cố gắng in đối tượng của mình và đôi khi tôi nhận được dấu nháy đơn trong đầu ra. Xin hãy giúp tôi hiểu lý do tại sao nó xảy ra và làm thế nào tôi có thể in ra các đối tượng mà không có dấu ngoặc kép.Tại sao một số chuỗi Python được in với dấu ngoặc kép và một số được in không có dấu ngoặc kép?

Đây là mã của tôi:

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) 

Dưới đây là những gì tôi làm:

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

Dưới đây là những gì tôi nhận được:

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

Dưới đây là những gì tôi muốn nhận được:

(X (Y y) (Z z)) 

Tại sao dấu ngoặc kép xuất hiện xung quanh giá trị của các nút đầu cuối, nhưng không phải xung quanh giá trị của các thiết bị đầu cuối không?

+0

OK, tôi đã tìm thấy giải thích tại sao repr (x) tạo chuỗi trong dấu ngoặc kép [ở đây] (http://stackoverflow.com/questions/7784148/understanding-repr-function-in-python) – Olga

Trả lời

14

repr trên chuỗi cung cấp dấu ngoặc kép trong khi str thì không. ví dụ .:

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

Hãy thử:

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) 

để thay thế.

+0

Nó phù hợp với tôi. – Olga

Các vấn đề liên quan