2016-06-17 6 views
-1

私はPythonでいくつかのデータ構造とアルゴリズムをブラッシングしていますので、私はUnordered Linkedリストを実装しています。同じファイルの中で、まずNodeクラスの後にListクラスを書きました。私のsearch_item()メソッドの "現在の"変数が、ノードオブジェクトであるか、少なくともNodeクラスのメソッドと属性にアクセスできるように見えるかどうかは分かりません。私がadd_node()メソッドをコメントアウトすると、 "現在の"ノードのメソッドへのアクセス権がなくなったことに気付きました。今は明示的に継承も合成も使用していないので、コードが以下に書かれている方法でget_next()をどのように呼び出すのが難しいか見ています。私は現在のように宣言する必要があると思うだろう:current = Node(self.head)しかし、ちょうどcurrent = self.headは動作するようですか? あなたの助けに感謝します。いくつかの構成の側面を理解していません

class Node: 
    def __init__(self, data): 
     self.data = data 
     self.next = None 

    def get_data(self): 
     return self.data 

    def set_data(self, d): 
     self.data = d 

    def get_next(self): 
     return self .next 

    def set_next(self, n): 
     self.next = n 

class UnorderedList: 
    def __init__(self): 
     self.head = None 

    def add_node(self, item): 
     tmp = Node(item) 
     tmp.set_next(self.head) 
     self.head = tmp 

    def search_item(self, item): 
     current = self.head 
     # current = Node(self.head) 
     found = False 
     while current != None and not found: 
      if current.get_data() == item: 
       found = True 
      else: 
       current = current.get_next() 
     return found 
+0

例が継承されていません。だからあなたは何の相続​​面を理解していないのですか?あなたの質問を変更できますか? – olivecoder

+0

@olivecoder、正しい、私は私の元の記事で述べたように、私は明示的に継承や合成を使用していませんが、何らかの理由でUnorderedList(ノード)を宣言し、current = Node(self.head) Nodeのメソッドへの現在のアクセスを提供しています。理由を理解したいと思います。これが私の質問をクリアすることを願っています。 – tjbadr

+0

TBadrなし。明示的または暗黙的に(?)継承を使用していません。質問は継承とは関係がありません。あなたはそのコードに従うことができません。私はコンセプトは継承ではなく、全く問題ではないと言うことができます。だから私はあなたの質問のために編集を提案しようとしましたが、私はそれのタイトルを想像することができませんでした、確かにそれは最新ではありません。 – olivecoder

答えて

0

さてあなたは、あなたが長いのでsearch_itemは常にNoneあるself.headの初期値が表示されます任意のあなたのリンクリストにノードを追加しないadd_nodeをコメントアウト場合。 add_nodeを経由してあなたが常にtmpとしてNoneまたはNodeのインスタンスのいずれかself.headポイントがtmp = Node(item)によって作成され、その後、self.head = tmpに割り当てられていることを確認するためcurrent.get_next()を呼び出す

だけで動作します。したがって、current = self.headを設定すると、既にNode(またはNone)のインスタンスを参照するので、current = Node(self.head)に電話する必要はありません。

+0

応答@DAXaholicに感謝します。あなたの説明をファイル(Stack)に3番目のクラスを追加してテストし、Stackインスタンスを指すListクラス内にダミーメソッドを追加しました。私は、self.headが複数のタイプのオブジェクトを指している場合、「現在の」ものがどのようなものかを見たいと思っていました。奇妙なことは、 "current"はNodeクラスのメソッドと属性を呼び出す順序に関係なく、スタックメソッドと属性を選択する唯一の方法です。self.headがノードオブジェクト。 – tjbadr

+0

私は、クラス内のさまざまなタイプのオブジェクトにself.headを設定して、さらに実験を行いました。その場合、特定のvar = self.headを設定すると、定義されている最初のオブジェクト(私の場合、self.head = tmpを介したNodeオブジェクト)の型をとります。さもなければ、それは残りますなし型。ご協力いただきありがとうございます。 – tjbadr

関連する問題