ООП 24 Магические методы __iter__ и __next__ Итерация экземпляров класса Python

Поделиться
HTML-код
  • Опубликовано: 9 июн 2020
  • 🔥🔥🔥 Курс на степике по ООП 🔥🔥🔥
    stepik.org/z/114354
    Степик с меня берет комиссию поэтому
    1) Лучший способ приобрести курс - личный банковский перевод в РФ или покупку тарифа на boosty. Я добавлю вас вручную на курс по вашему ид.
    t.me/artem_egoroff
    2) оплачивать напрямую на степике по реферальной ссылке
    stepik.org/z/114354
    так с меня возьмут меньше комиссии
    🚀🚀🚀 Доступ к закрытым видео на один месяц вы можете получить, став спонсором канала
    / @egoroffchannel
    boosty.to/egoroff_channel
    / artem_egorov
    👉👉👉Телеграмм канал моего проекта
    t.me/python_egoroff
    👉👉👉Группа в вк
    python.study
    egoroffartem.pythonanywhere.co...
    Магические методы _iter_ и _next_
    Итерация экземпляров класса Pythone
    Методы экземпляра. Аргумент self
    • ООП 5 Методы экземпляр...
    • ООП 6 Инициализация об...
    Инициализация объекта. Метод init
    Магические методы _getitem_ , _setitem_ и __delitem__. Обращение по индексу к экземпляру
    Object-Oriented Programming (OOP) in Python 3
    egoroffartem.pythonanywhere.co...
    stepik.org/course/63085/promo
    Курс на степике
    Все видео этого курса можете найти на сайте
    egoroffartem.pythonanywhere.co...

Комментарии • 27

  • @egoroffchannel
    @egoroffchannel  Месяц назад

    🔥 Записывайся на курс по ООП: stepik.org/a/114354
    📙 Там тебя ждет:
    ✔ более 180 практических заданий по ООП
    ✔ более 300 тестовых заданий на проверку материала
    ✔ более 6 часов видеоматериала
    ✔ текстовые материалы по урокам, примеры кода
    ✔ Доступ к закрытому чату с дружественной обстановкой
    ✔ Сертификат в случае успешного прохождения курса
    🎁 По промокоду EGOROFF можно получить 10% скидки на приобретение данного курса

  • @MultiPalaz
    @MultiPalaz 4 года назад

    Большое спасибо за видео! Очень важная и полезная для меня тема 👍

  • @user-hn7gb9ej9d
    @user-hn7gb9ej9d 4 года назад

    Спасибо!

  • @katherinesunny_day7414
    @katherinesunny_day7414 2 года назад +1

    Мне вот непонятен момент в начале. Где мы используем getitem.
    Мы пишем:
    for i in igor:
    print(i)
    А в методе getitem:
    return self.name[item]
    Я так понимаю, что цикл for берет igor и хочет его обойти. То есть, по логике он должен вывести
    Igor,
    Nikolaev,
    [3, 4...]
    Но не может этого сделать, тк не умеет. Тогда мы пишем getitem, который указывает, что нам нужно взять только name, или surname, или marks для их обхода. Но как цикл понимает, что in igor имеется в виду именно name, или surname, или marks, а не сам экземпляр?
    Как-то не очень логично

  • @user-py2yx4fg8l
    @user-py2yx4fg8l 3 года назад +4

    думаю, что можно и так
    def __iter__(self):
    print('Call iter')
    self.index = -1
    return self

  • @user-fc6nr8cr4p
    @user-fc6nr8cr4p 3 года назад +1

    Так. Вот что меня немного запутало и вроде бы разобрался, в классе Student мы аргумент self.index=0 внесли в метод __iter__, а в классе Mark мы этот аргумент внесли прямо в метод __init__, что бы разобраться я попробовал self.index = 0 в классе Student внести так же в метод __init__ , ну и как предполагалось. всё работает так же, т.е в обоих этих классах self.index = 0 можно сделать аргументом любого из методов - либо __iter__ либо __init__

  • @anjelikan7407
    @anjelikan7407 4 года назад

    Спасибо Игорь.
    Тем кто еще думает о том, что стоит ли покупать подписку? - Стоит!
    Однозначно.

  • @zamestaimja
    @zamestaimja 3 года назад +8

    Не самый удачный урок. Все как-то дергано, особенно под конец

  • @yarik7439
    @yarik7439 4 года назад

    Привет, а как много еще будет видео по ООП. И еще есть вопрос, эффективен ли способ изучения питона, когда ты по сути просто переписываешь код из видеоурока, разбирая его (к примеру смотреть как создать змейку или еще что-нибудь)?

    • @hhhe6666
      @hhhe6666 4 года назад

      Ну такое) Лучше конечно брать дополнительные задания и прорешивать

    • @dar1kje812
      @dar1kje812 2 года назад

      Это нормально))) если он что-то забудет, он просто откроет тот самый код, лучше еще комментарии оставлять в самом коде.

  • @user-hh5mw7qn8m
    @user-hh5mw7qn8m 4 года назад +2

    Привет👋. Ты будешь делать сайты на django или flask? Заранее спасибо)

    • @miles7610
      @miles7610 4 года назад

      Давай. Пожалуйста)

    • @kirillusenko
      @kirillusenko 4 года назад

      @@miles7610 ьеь, с Дударя пришёл?))

  • @artemvigdorchik3023
    @artemvigdorchik3023 3 года назад +1

    Возможно ли чтобы внутри класса Student метод iter обходил по индексу не конкретный атрибут name/surname/marks, а именно список из атрибутов?

    • @egoroffchannel
      @egoroffchannel  3 года назад +1

      Да, можешь указать там список и в нем перечислить атрибуты

    • @yountdonnette9878
      @yountdonnette9878 2 года назад +1

      def __iter__(self):
      self.list_of_init = [self.name, self.surname,list(self.marks)]
      self.index = 0
      return iter(self.list_of_init)

  • @michael9312
    @michael9312 2 года назад

    вопрос
    почему в class Student в методе __iter__ в начале возвращаем self, а потом в методе __iter__ класса Student возвращаем не self.marks, а iter(self.marks)?

  • @Tolya421.
    @Tolya421. 3 года назад

    После 5го просмотра вкурил👍😀

    • @egoroffchannel
      @egoroffchannel  3 года назад +3

      после 5ти итераций?)

    • @Tolya421.
      @Tolya421. 3 года назад

      @@egoroffchannel 🤣🤣🤣

  • @ankhmarcius8331
    @ankhmarcius8331 4 года назад

    с этим никак не связан yield? или это про другое и не связанно с итераторами?

    • @TheAngpeu
      @TheAngpeu 4 года назад

      yield используется для создания генераторов.

  • @deniskrepak
    @deniskrepak 3 года назад

    Для чего мы потом self.index зануляли? Я подумал, что для того, чтобы при повторной итерации над igor мы могли бы обойти еще раз. Но нет, мы можем обойти и без занесения. Так смысл тогда от этой строки?

    • @sergeybotsman360
      @sergeybotsman360 2 года назад

      как вариант можно так сделать, так как при обращении к обьекту оператор цикла обращаеться к первоночальному итеру (с нулевым индексом)
      class Marks:
      def __init__(self, values):
      self.value = values
      def __iter__(self):
      print('call iter marks')
      self.index = 0
      return self
      def __next__(self):
      print('call next marks')
      if self.index >= len(self.value):
      raise StopIteration
      letter = self.value[self.index]
      self.index += 1
      return letter

  • @samirahuseynli6956
    @samirahuseynli6956 3 года назад

    где я могу найти ваш код? я делаю все как вы говоритe но у меня другой результат -_-