ООП 16 Магические методы __len__ и __abs__. (Dunder methods)

Поделиться
HTML-код
  • Опубликовано: 5 май 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...
    Методы экземпляра. Аргумент self
    • ООП 5 Методы экземпляр...
    Декоратор Property
    • ООП Python 11 Декорато...
    Декораторы в Python
    • Декораторы в Python Ч...
    • ООП 6 Инициализация об...
    Инициализация объекта. Метод init
    • ООП 9 Публичные, прива...
    Публичные, приватные, защищенные атрибуты и методы
    Магические методы в Python очень важны. Метод _abs_ вызывается, когда объект поступает на вход функции abs
    Магический метод _len_ вызывается, когда объект поступает на вход функции len
    Object-Oriented Programming (OOP) in Python 3
    egoroffartem.pythonanywhere.co...
    stepik.org/course/63085/promo
    Курс на степике
    Все видео этого курса можете найти на сайте
    egoroffartem.pythonanywhere.co...

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

  • @egoroffchannel
    @egoroffchannel  26 дней назад

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

  • @Andrew__.
    @Andrew__. 4 года назад +3

    Лучшие уроки!!!!

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

    Очень годный контент

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

    Всё отлично, как всегда.

  • @user-rw2ig6nb5l
    @user-rw2ig6nb5l 3 года назад

    Спасибо, Артем.

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

    Спасибо огромное за тёмный фон!

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

    Спасибо.

  • @Dm-if3vl
    @Dm-if3vl 3 года назад

    Спасибо

  • @ERROR-yl3un
    @ERROR-yl3un 4 года назад

    Моё самое любимое в Python это ООП

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

    __len__ больше про подсчет элементов, поэтому должно быть натуральным числом.

  • @Aquila-jq8sm
    @Aquila-jq8sm 4 года назад +2

    Спасибо за тёмную тему. Будут ли видео про работу с вебом? И может кто-нибудь посоветовать каналы для изучения.

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

    лайк

  • @Zeld1y
    @Zeld1y 4 года назад +4

    Кстати будешь ли делать видео по django

    • @egoroffchannel
      @egoroffchannel  4 года назад +10

      После ооп

    • @user-uy8zs4sl5w
      @user-uy8zs4sl5w 3 года назад

      @@egoroffchannel Отличная новость!

    • @Exmidzza
      @Exmidzza 2 года назад +2

      @@egoroffchannel и где же django))))

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

      @@egoroffchannel ждём!))

  • @ERROR-yl3un
    @ERROR-yl3un 4 года назад

    У меня после этого видео реклама про Python вышла :D

  • @zh-zaharov5558
    @zh-zaharov5558 4 года назад +3

    Спасибо вам за видео и уроки. А вы можете продемонстрировать нам более сложные механизмы на 'python'?
    Хочется увидеть функционал

  • @alexanderselesnev3739
    @alexanderselesnev3739 4 года назад +1

    Поначалу с магическим методом __len__ было понятно. Но пример с class Otrezok: сбил с понимания. Во-первых, переменные класса self.x1 и self.x2 - целочисленные значения, а метод работает со строками. Во-вторых, по определению, метод возвращает длину объекта (количество элементов в объекте). Так сколько элементов содержит объект t ?

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

      на счет первого вопроса. Какой метод работает со строками? о чем речь?
      на счет второго вопроса. Я так понимаю идет речь об определении понятия длина? Если да, то в нашем случае мы находим длину отрезка, а не количество элементов

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

      Время по видео 1:24 - у строк есть метод __len__ , а у чисел нет. Спасибо за ответ. Если я что-то не понимаю, будем разбираться.

    • @chem826
      @chem826 4 года назад +1

      Да, я тоже не понял этого момента.

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

      Эта строчка, разве не будет лишней? Можно же ведь без нее тоже обойтись
      def __len__(self):
      return abs(self)

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

      @@alexanderselesnev3739 в данном случае мы когда вызываем len у экземпляра класса, мы не длину числа (это не возможно) хотим вычислить, а вызвать магический метод __len__, в котором нам возвращается математическое выражение разности между точками

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

    Почему если в метод __abs__ установить print, то при объявлении экземпляра класса принт срабатывает аж 4 раза
    INPUT:
    class Distance:
    def __init__(self, x1, x2):
    self.x1 = x1
    self.x2 = x2
    def __len__(self):
    return abs(self)
    def __abs__(self):
    print('Модуль')
    return abs(self.x1 - self.x2)
    a = Distance(9,5)
    OUTPUT:
    Модуль
    Модуль
    Модуль
    Модуль

  • @ice-lc6mf
    @ice-lc6mf 2 года назад

    Доброго времени суток.Артем подскажи что за ерунду у меня выдает в Pycharm с методом __len__ ?
    class A:
    def __init__(self,a1):
    print("проверка инициализации")
    self.a1=a1
    def __len__(self):
    print("проверка __len__")
    return 50
    a=A(34)
    print(len(a))
    ----------------------- в итоге выдает:
    проверка инициализации
    проверка __len__
    50
    проверка __len__
    проверка __len__
    проверка __len__
    проверка __len__
    проверка __len__
    проверка __len__
    ____________________Как так ? Почему принт срабатывает столько раз?
    А если обратиться в консоли ,т.е. вбить a=A(34) ,то после инициализации выдаст два принта,а если вбить другой экземпляр b=A(2) то 2 принта !
    Что за ерунда творится не понимаю.На телефоне пробую - все нормально.Please help! :)

  • @34alexed
    @34alexed 4 года назад

    тема с методом __abs__ не дораскрыта.
    Можно было сразу написать
    def __len__(self):
    return abs(self.x2 - self.x1)
    и в таком случае
    def __abs__(self):
    return abs(self.x2 - self.x1)
    лишнее написание кода.
    Вопрос следующий если, для того чтобы найти модуль числа мы используем abs() тогда для чего отдельный метод __abs__, он ничего не делает.

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

      когда ты пишешь abs(self.x2 - self.x1), то метод __abs__ будет вызываться у числа
      а здесь я показал что один магический метод может вызывать другой

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

    не понятно для чего это вообще нужно, можно же создать метод с именем len и метод с именем abs, и дать им функционал len и abs, вызываться только будут они как методы а не как функции. поправьте если не так, но пока вообще не вижу практического применения этим "магическим" методам

  • @user-li5ls7gu5z
    @user-li5ls7gu5z 4 года назад +1

    а где же 14-й ролик?

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

      По ходу доступен только спонсорам)

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

      @@aleksandrfareast нет, его просто нет. для спонсоров ролики тоже показываются, но посмотреть их нельзя

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

      @@user-li5ls7gu5z теперь это тоже спонсорский ролик))

  • @ice-lc6mf
    @ice-lc6mf 2 года назад

    class A:
    def __len__(self):
    print("проверка __len__")
    a = A()
    выдает такую штуку:
    проверка __len__
    проверка __len__
    проверка __len__
    проверка __len__
    проверка __len__
    проверка __len__
    кто подскажет почему принт печатает столько раз в консоли в Pycharm? И вообще почему __len__ выполняется? Я же не вызвал его еще!!!

    • @ice-lc6mf
      @ice-lc6mf 2 года назад

      похоже что в методе __len__ не нужно прописывать принт для корректного отображения ,т.к. там идет какая-то непонятная итерация.И реализацию не всю можно сделать ,например вернуть строку не получится - ошибки появляются.

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

    Честно, не вижу пока практического применения этих методов. Метод ради метода.