4 подписчика
Долго пытался понять, в чём смысл переписывать простой генератор чисел Фибоначчи типа:
def fib(max):
a, b = 0, 1
while a < max:
yield a
a, b = b, a + b
... зачем описывать его в виде класса? Это же гораздо длинней:
class Fib:
def __init__(self, max):
self.max = max
def __iter__ (self):
self.a = 0
self.b = 1
def __next__(self):
fib = self.a
if fib > self.max:
raise StopIteration
self.a, self.b = self.b, self.a + self.b
return fib
К тому же в переводе "Погружения в Питон 3" не хватает страниц — пришлось лезть в оригинал. Ответ оказался даже не в основном тексте, а во врезке. Суть в чём: __init__, __iter__, __next__ — это специальные, заранее предопределенные в Питоне методы, добавление которых в класс позволяет обращаться к его экземплярам, как к соответствующего типа объектам. В данном случае был создан итератор, и если его отдать циклу for, то он без труда его опознает.
Около минуты
12 мая 2022