#19. Магические методы __iter__ и __next__ | Объектно-ориентированное программирование Python

preview_player
Показать описание

Создаем итерируемые объекты с помощью магических методов __iter__() и __next__().

Рекомендации по теме
Комментарии
Автор

Здравствуйте Сергей!Спасибо вам огромное за ваш курс, вы лучший преподователь!!

xilagos
Автор

Спасибо Сергей ! Этот курс по ООП более Новичко-Ориентированный )
Читаю комментарии и хочу сказать тем кто не понимает: ребята, до любого материала нужно созреть, вы же не расстраиваетесь когда клубника в огороде еще зеленая ) Просто нужно продолжать и всё придет 100 % !

mrup
Автор

спасибо за урок! Если вдруг кто-то не знал, чтобы продублировать строчку в pycharm, достаточно нажать комбинацию клавиш ctrl + d)

ПростоХристианство-чз
Автор

Урок #19 = Пройден

Ура, и еще раз ура. С магическими методами окончено 😁

В целом, было очень интересно узнать о них, и на что они все способны. Я прошел все стадии. Недопонимание, Отрицание, Гнев, Принятие. И даже соглашусь с популярным комментом ниже. Не вся инфа должна пониматься сразу. Все придет с опытом )

Фух, половина курса пройдена...летс гоу гайсы ко второй

jaksonmillka
Автор

Метод __iter__ возвращает сам объект?😯 так просто? Офигенно... 🤓Спасибо за мое прозрение!😇

Лена-вны
Автор

Вы просто святой! Это гениальное объяснение!

ЕрвандАгаджанян-вк
Автор

Сергей, я нашел один недочет в видео. Я несколько раз пересмотрел этот урок и проработал его в пайчарм. Вот что я нашел: Когда мы будем перебирать наш экземпляр класса FRange, то успешно переберем наш экземпляр. Но вот значение нашего счетчика (self.value) мы не обнулили. Понятно, что при следующем переборе экз. в цикле, мы автоматически вызовем ____iter__ и value обнулится. Но если по логике программы нам нужно будет использовать этот же экз. но в "свежем виде", то обнуление value при возникновении StopIteration тоже нужно было предусмотреть.

borys.bond_
Автор

а можно пожалуйста ссылку на видео, где не в рамках ооп разбирались итераторы?

rocker
Автор

Спасибо за видео. Хотелось бы увидеть как реализовать FRange(), FRange(10), FRange(1, 10), FRange(10, 1) и

ЮрийОстапенко-фч
Автор

а почему на 04:45 в консоли мы получили аутпут следующего вида?:

1) адрес и название запущенной программы
2) текст ошибки
3) вывод данных кода, который не вызывает возмущения среды разработки.

Если точнее, то суть вопроса такова: почему ошибка в консоли находится выше выведенных без ошибки данных, хотя в коде строчка, спровоцировавшая ошибку идёт после беспроблемных строчек?

johnmazepa
Автор

Здравствуйте, Сергей! Наверное, в функции __next__ класса FRange2D вместо iter(self.fr) можно просто вернуть self.fr.
Спасибо за очередной прекрасный урок!

СергейУшаков-цч
Автор

Здравствуйте Сергей!
Есть ли у Вас планы на создание контента по асинхронному программированию на Python?

NickTyupin
Автор

указав self.value внутри __iter__ будем получать ошибку при попытке получить следующее значение через print(next(...)).
решается переносом self.value в __init__, да и в принципе более логично задать значение при создании объекта класса

leobrofriendbeaver
Автор

12:25 явно видно, что между строками нет пустой строки, почему не сработал print() после цикла for x in row ?

АлексейАлексеев-цхт
Автор

Здраствуйте! Посмотрел это видео несколько раз, и все было понятно. Но где-то на шестой раз возник вопрос: почему цикл for перебирает итератор на основе класса FRange не до упора? То есть, не поднимается исключение StopIteration.

migorpresents
Автор

честно, не хватает обьяснения после 8:30 когда мы делаем к примеру: return self и после, очень плохо понятно

playt_pythonlearn
Автор

Впервые знакомлюсь с ООП по Вашим видео. Дошел до #11 Дескрипторы, все супер! Далее разбираются исключительно магические методы. Мне для первого знакомства с ООП нужно разбирать приведенные методы, или будет лучше изучить более общие вопросы ООП (полиморфизм, наследование и т.д.), а уже после углубляться в различные методы?

ЭльбердГодоборшев
Автор

Не пойму, __iter__ без __next__ не работает получается что ли? Записал в пайчарм метод __iter__ и перебрал объект класса через for. Выдает ошибку, что объект неитерируемый

КонстантинЧикилев
Автор

Кто подскажет, почему когда передаешь step 0.1 получаются похожие на это значения с разным интервалами? Обычный range не принимает за step вещественные числа, но если вызвать arange в numpe и передать за шаг 0.1 результат будет такой же как и в начале. Не могу понять почему так происходит.

kiyotakaayanokouji
Автор

я же правильно понимаю, что перенос self.velue в метод __iter__ не принципиальный момент, но просто не логичнее ли его оставить в __init__?

АртурХасиев-жс