擅长:python、mysql、java
<p><code>filler</code>无论如何都有点奇怪,因为它只需要<code>self</code>来进行递归调用。它实际上是一个替代构造函数,使它更适合作为类方法,类似于</p>
<pre><code>class Tree(object):
def __init__(self, data=None, left=None, right=None):
self.left = left
self.right = right
self.data = data
# The former method filler()
@classmethod
def from_list(cls, lista):
if lista:
# All non-empty lists are the same.
# Specifially, nr = 0 for a single-element list,
# and lista[:nr] and lista[nr+1:] are empty lists
# in the edge cases.
nr = len(lista) // 2
return cls(lista[nr],
cls.from_list(lista[:nr]),
cls.from_list(lista[nr+1:]))
else:
return None
tree = Tree.from_list([1,2,3,4,5,6])
</code></pre>
<p>使用类方法的好处是可以定义<code>Tree</code>的子类,而不必重新定义<code>from_list</code>。考虑</p>
^{pr2}$
<p>尽管<code>BackwardsTree.from_list</code>解析为<code>Tree.from_list</code>,因为您没有重写该函数,但返回值仍将是<code>BackwardsTree</code>的实例,而不是{<cd3>},因为您使用了<code>cls</code>来创建每个(子)树,而不是在方法内部对<code>Tree</code>进行硬编码。在</p>