私はlist
とIterable
を継承したので、追加、索引付け、反復のようなものをすべてテストしましたが、小さな問題があります。 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)
あなたは '__str__'を上書きしましたか? – itzMEonTV
str()の例として、Pythonデバッガなどの他のものも空のリストを示しています。 – Gala
データ保存に '' self''を使用しない場合、 '' list''をサブクラス化するのは全く無意味でした。実際にその継承から得たものは、その状況ではうまく動作しません。 – jasonharper