dict
имеет несколько методов создания итераторов - iterkeys
, itervalues
, iteritems
- и ваш класс тоже. Если есть один «самый естественный» способ итерации, вы должны также присвоить ему псевдоним __iter__
для удобства и читабельности (это, вероятно, будет iterrows
; конечно, всегда будут некоторые сомнения, как это было с dict
когда мы разработали его итерационное поведение, но разумный выбор лучше, чем ничего).
Например, предположим, что ваша матрица имеет квадратную форму, сведена в большой список строк self.data
со стороной self.n
. Тогда:
def iterrows(self):
start = 0
n = self.n
data = self.data
while start < n*n:
stop = start + n
yield data[start:stop]
start = stop
def itercols(self):
start = 0
n = self.n
data = self.data
while start < n:
yield data[start::n]
start += 1
__iter__ = iterrows