私はPythonで少しOOPを実験しましたが、データ構造上で宿題をしていましたが、修正方法を継承する方法を理解する上でいくつかの問題があります。正しい方法で1つの修正を継承する
class BinarySearchTree(object):
# snipped
def _insert(self, key, val):
prevNode = None
currentNode = self.root
while currentNode:
prevNode = currentNode
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):
prevNode = None
currentNode = self.root
while currentNode:
prevNode = currentNode
prevNode.size += 1 # The only difference is in this line
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
をそして、私の質問があります:このメソッドを継承し、全体をコピーせずに、この1差(prevNode.size += 1
)を実現するスマートな方法があります継承された関数コード?
P .:私の悪い英語のために申し訳ありません。
UPD:今、私は
いいえこれはあなたがそれをするために。ノードを一度しか変更していない場合は、それが一つのことになりますが、ループしているので、メソッドを再実装する必要があります。 –
'prevNode.size + = self.something'を設定し、それを適切に(デフォルトでは' 0'に)設定することができます。 – jonrsharpe
[懸念の分離](https://en.wikipedia.org/wiki/Separation_of_concerns)では、ツリークラスのコードでノードを管理する必要があります。これを行う良い方法は訪問者のデザインパターンです。 – CAB