<p>它不太优雅,但你可以这样做:</p>
<pre><code>class BinarySearchTree(object):
def _insert(self, key, val, update=False):
prevNode = None
currentNode = self.root
while currentNode:
prevNode = currentNode
if update:
prevNode.size += 1
if key < currentNode.key:
currentNode = currentNode.leftChild
else:
currentNode = currentNode.rightChild
if key < prevNode.key:
prevNode.leftChild = self.Node(key, val, parent=prevNode)
self.updateNodeProperties(prevNode.leftChild)
else:
prevNode.rightChild = self.Node(key, val, parent=prevNode)
self.updateNodeProperties(prevNode.rightChild)
# snipped
class RBTree(BinarySearchTree):
# snipped
def _insert(self, key, val):
super(RBTree, self)._insert(self, key, val, update=True)
</code></pre>
<p>我真的不喜欢这样,因为它在你的<code>BinarySearchTree</code>类中有代码来更新一个实例变量,这个实例变量除了在派生的<code>RBTree</code>类中之外是不存在的,但是由于这部分代码不应该为<code>BinarySearchTree</code>实例执行,所以你不应该遇到<code>NameError</code></p>