Countdown(start) as its own iterator: __iter__ returns self and __next__ yields start, start-1, … 1 then raises StopIteration. Then list(Countdown(3)) is [3, 2, 1]. (The generator version belongs to another topic — here build the protocol by hand.)list(Countdown(3))
[3, 2, 1]
The for machinery calls __next__ until StopIteration.
Track the current value as instance state.
raise StopIteration when it hits 0.