2017-04-09 13 views
0

私はlistIterableを継承したので、追加、索引付け、反復のようなものをすべてテストしましたが、小さな問題があります。 str(DataSet)のようなメソッドは空のリストを返し、Pythonデバッガは空のリストを表示しますが、これはリストの親に追加するのではなく内部データを追加するためです。 selfを返さずにself.dataを返すには、何を書き換える必要がありますか?自分自身ではなく、内部データ配列を返すために子リストをオーバーライドするにはどのような方法が必要ですか?

class DataSet(collections.Iterable, list): 

    data = collections.deque() 
    index = 0 
    max = 3 

    def __add__(self, other): 
     self.append(other) 

    def append(self, item): 


     if len(self.data) >= self.max: 
      self.data.popleft() 

     self.data.append(item) 

    def __next__(self): 

     if self.index < len(self.data): 

      ret = self.data[self.index] 
      self.index += 1 
      return ret 

     raise StopIteration 

    def __getitem__(self, i): 
     return self.data[i] 

    def __iter__(self): 
     self.index = 0 
     return self 

    def setMax(self, max): 
     self.max = max 

    def __len__(self): 
     return len(self.data) 

enter image description here

+0

あなたは '__str__'を上書きしましたか? – itzMEonTV

+0

str()の例として、Pythonデバッガなどの他のものも空のリストを示しています。 – Gala

+1

データ保存に '' self''を使用しない場合、 '' list''をサブクラス化するのは全く無意味でした。実際にその継承から得たものは、その状況ではうまく動作しません。 – jasonharper

答えて

0

オーバーライド

def __str__(self): 
    return str(self.data) 
+0

コードを補完する説明を追加することを検討してください。これは、今後どのように動作するかを理解するこのポストを訪問するユーザーを助けるでしょう。 –

関連する問題