Встречается на собеседованиях • сегодня

Что произойдет, если у объекта нет магического (dunder) метода __next__

Если у объекта нет метода __next__, но есть __iter__, то объект может использоваться в итерационных контекстах (например, в цикле for), но сам по себе не будет итератором. Если же отсутствует и __iter__, попытка итерирования вызовет TypeError.

Пример:

python
class NoNext:
    def __iter__(self):
        return self  # Нарушение протокола: должен возвращать итератор

obj = NoNext()
for item in obj:  # TypeError: iter() returned non-iterator of type 'NoNext'
    pass

Для полноценного итератора нужны оба метода:

python
class ValidIter:
    def __init__(self):
        self.count = 0
    
    def __iter__(self):
        return self
    
    def __next__(self):
        if self.count >= 3:
            raise StopIteration
        self.count += 1
        return self.count
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы