有一个关于二叉树类的例子。
首先我定义了类Tree。
>>> class Tree(object):
>>> def __init__(self, data=None, left=None, right=None):
>>> self.data = data
>>> self.left = left
>>> self.right = right
>>> def inorder(self):
>>> if self.left:
>>> for x in self.left.inorder():
>>> yield x
>>> yield self
>>> if self.right:
>>> for x in self.right.inorder():
>>> yield x
>>> def __iter__(self):
>>> return self.inorder()
>>> def __repr__(self, level=0, indent=" "):
>>> s = level*indent + `self.data`
>>> if self.left:
>>> s = s + "\n" + self.left.__repr__(level+1, indent) # *** Right this point ***
>>> if self.right:
>>> s = s + "\n" + self.right.__repr__(level+1, indent)
>>> return s
然后定义函数“tree”
>>> def tree(List):
>>> n = len(List)
>>> if n == 0:
>>> return None
>>> i = n / 2
>>> return Tree(List[i], tree(List[:i]), tree(List[i+1:]))
最后打印二叉树
>>> t = tree('abcdef')
>>> print t
结果如下所示。
'd'
'b'
'a'
'c'
'f'
'e'
问题是为什么不在我指示的 repr 方法中插入“self”。
self.left是实例,因此可以不将'self'放入_ repr _method?
提前感谢:)
答案 0 :(得分:1)
self.left
是 Tree
类的另一个实例。
树中的每个元素都有两个“子”节点self.left
和self.right
,而__repr__
只是将这些节点的打印直接委托给节点本身,并带有可配置的缩进。
通常,你会调用repr(self.left)
,然后Python会调用self.left.__repr__()
,但这并不能让你选择传入缩进级别;所以此代码直接调用self.left.__repr__()
。