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

Поділитися
Вставка
  • Опубліковано 15 лис 2024

КОМЕНТАРІ • 28

  • @egoroffchannel
    @egoroffchannel  5 місяців тому

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

  • @ЕвгенийКрамар-о1ъ
    @ЕвгенийКрамар-о1ъ 3 роки тому +4

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

  • @НиколайМануилов-и1д

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

  • @MultiPalaz
    @MultiPalaz 4 роки тому

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

  • @anjelikan7407
    @anjelikan7407 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, а не сам экземпляр?
    Как-то не очень логично

  • @дмитрий-щ6ф6е
    @дмитрий-щ6ф6е 4 роки тому +2

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

    • @miles7610
      @miles7610 4 роки тому

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

    • @kirillusenko
      @kirillusenko 4 роки тому

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

  • @МихайлоМ-п5ц
    @МихайлоМ-п5ц 4 роки тому

    Спасибо!

  • @zamestaimja
    @zamestaimja 3 роки тому +10

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

  • @yarik7439
    @yarik7439 4 роки тому

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

    • @hhhe6666
      @hhhe6666 4 роки тому

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

    • @dar1kje812
      @dar1kje812 2 роки тому

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

  • @michael9312
    @michael9312 3 роки тому

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

  • @artemvigdorchik3023
    @artemvigdorchik3023 4 роки тому +1

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

    • @egoroffchannel
      @egoroffchannel  4 роки тому +1

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

    • @yountdonnette9878
      @yountdonnette9878 3 роки тому +1

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

  • @Tolya421.
    @Tolya421. 3 роки тому

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

    • @egoroffchannel
      @egoroffchannel  3 роки тому +3

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

    • @Tolya421.
      @Tolya421. 3 роки тому

      @@egoroffchannel 🤣🤣🤣

  • @deniskrepak
    @deniskrepak 3 роки тому

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

    • @sergeybotsman360
      @sergeybotsman360 3 роки тому

      как вариант можно так сделать, так как при обращении к обьекту оператор цикла обращаеться к первоночальному итеру (с нулевым индексом)
      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

  • @ankhmarcius8331
    @ankhmarcius8331 4 роки тому

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

    • @TheAngpeu
      @TheAngpeu 4 роки тому

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

  • @MilcFord
    @MilcFord 2 місяці тому

    Не совсем понятна последняя реализация с оценками

  • @samirahuseynli6956
    @samirahuseynli6956 3 роки тому

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