私はHashTableクラスをラップすることができる必要があります。ラッパーについて読んだら、私はこれがラッパーの悪い使い方だと確信していますが、それは私の割り当てにあります。 (私は簡単にプログラムにスワップする必要が異なるデータ構造を持っている)私のHashTableクラスをラップする
私は次のコードを持っている:私が使用している場合
from HashTable import HashTable
class HashTableWrapper(HashTable):
def __init__(self, probe, size):
super().__init__(probe, size)
def tableInsert(self, searchKey, newItem):
return self.HashTable.tableInsert(searchKey, newItem)
def tableRetrieve(self, searchKey):
return self.HashTable.tableRetrieve(searchKey)
def tableDelete(self, searchKey):
return self.HashTable.tableDelete(searchKey)
を:
x = HashTableWrapper("linearProbe", 100)
すべてがあれば、しかし、大丈夫です私は次を使用します:
x.tableInsert(4, 6)
私は次のエラーが発生します:AttributeError: 'HashTabl eWrapperのオブジェクトには 'HashTable'という属性はありません PythonはHashTableのすべての部分をハイライト表示するので、リターン部分に何か問題があると思います。 助けていただければ幸いです。
編集:私は、次の例を得た:
class BSTTableWrapper:
def tableInsert(item):
return self.bst.searchtreeInsert(item)
はい、 'HashTable'属性はありません。あなたはラッパーをビルドするために*作っていない*継承*しています。たとえば、 'self.tableInsert(searchKey、newItem)'です。しかし、問題は次のようになります。ラッパーのポイントは何ですか? – jonrsharpe
アイテムを挿入しようとすると、次のようになります。[前の行は995回以上繰り返しました] RecursionError:最大再帰深度を超えました。 私のポイントは、私のハッシュテーブル、binarysearchtree、2-3-4treeなどのすべての同様の関数は、ラッパーのために同じ名前になると思います。だから私は別の構造に切り替える場合は、私は別のラッパーをインポートすることができますが、すべての関数名は同じままになります。または私は間違っていますか? – goml
申し訳ありません、もしあなたが 'self'でそれを呼び出すなら、終わりのない再帰を得るでしょう。 '__init__'のように、親クラスのメソッドを呼び出すには' super()。tableInsert(...) 'が必要です。また、ラッパーインターフェースが親インターフェースと同じであれば、実際には利点はありません。 – jonrsharpe