ООП 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...
🔥 Записывайся на курс по ООП: stepik.org/a/114354
📙 Там тебя ждет:
✔ более 180 практических заданий по ООП
✔ более 300 тестовых заданий на проверку материала
✔ более 6 часов видеоматериала
✔ текстовые материалы по урокам, примеры кода
✔ Доступ к закрытому чату с дружественной обстановкой
✔ Сертификат в случае успешного прохождения курса
🎁 По промокоду EGOROFF можно получить 10% скидки на приобретение данного курса
Лучшие уроки!!!!
Очень годный контент
Всё отлично, как всегда.
Спасибо, Артем.
Спасибо огромное за тёмный фон!
Спасибо.
Спасибо
Моё самое любимое в Python это ООП
__len__ больше про подсчет элементов, поэтому должно быть натуральным числом.
Спасибо за тёмную тему. Будут ли видео про работу с вебом? И может кто-нибудь посоветовать каналы для изучения.
лайк
Кстати будешь ли делать видео по django
После ооп
@@egoroffchannel Отличная новость!
@@egoroffchannel и где же django))))
@@egoroffchannel ждём!))
У меня после этого видео реклама про Python вышла :D
Спасибо вам за видео и уроки. А вы можете продемонстрировать нам более сложные механизмы на 'python'?
Хочется увидеть функционал
Поначалу с магическим методом __len__ было понятно. Но пример с class Otrezok: сбил с понимания. Во-первых, переменные класса self.x1 и self.x2 - целочисленные значения, а метод работает со строками. Во-вторых, по определению, метод возвращает длину объекта (количество элементов в объекте). Так сколько элементов содержит объект t ?
на счет первого вопроса. Какой метод работает со строками? о чем речь?
на счет второго вопроса. Я так понимаю идет речь об определении понятия длина? Если да, то в нашем случае мы находим длину отрезка, а не количество элементов
Время по видео 1:24 - у строк есть метод __len__ , а у чисел нет. Спасибо за ответ. Если я что-то не понимаю, будем разбираться.
Да, я тоже не понял этого момента.
Эта строчка, разве не будет лишней? Можно же ведь без нее тоже обойтись
def __len__(self):
return abs(self)
@@alexanderselesnev3739 в данном случае мы когда вызываем len у экземпляра класса, мы не длину числа (это не возможно) хотим вычислить, а вызвать магический метод __len__, в котором нам возвращается математическое выражение разности между точками
Почему если в метод __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:
Модуль
Модуль
Модуль
Модуль
Доброго времени суток.Артем подскажи что за ерунду у меня выдает в 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! :)
тема с методом __abs__ не дораскрыта.
Можно было сразу написать
def __len__(self):
return abs(self.x2 - self.x1)
и в таком случае
def __abs__(self):
return abs(self.x2 - self.x1)
лишнее написание кода.
Вопрос следующий если, для того чтобы найти модуль числа мы используем abs() тогда для чего отдельный метод __abs__, он ничего не делает.
когда ты пишешь abs(self.x2 - self.x1), то метод __abs__ будет вызываться у числа
а здесь я показал что один магический метод может вызывать другой
не понятно для чего это вообще нужно, можно же создать метод с именем len и метод с именем abs, и дать им функционал len и abs, вызываться только будут они как методы а не как функции. поправьте если не так, но пока вообще не вижу практического применения этим "магическим" методам
а где же 14-й ролик?
По ходу доступен только спонсорам)
@@aleksandrfareast нет, его просто нет. для спонсоров ролики тоже показываются, но посмотреть их нельзя
@@user-li5ls7gu5z теперь это тоже спонсорский ролик))
class A:
def __len__(self):
print("проверка __len__")
a = A()
выдает такую штуку:
проверка __len__
проверка __len__
проверка __len__
проверка __len__
проверка __len__
проверка __len__
кто подскажет почему принт печатает столько раз в консоли в Pycharm? И вообще почему __len__ выполняется? Я же не вызвал его еще!!!
похоже что в методе __len__ не нужно прописывать принт для корректного отображения ,т.к. там идет какая-то непонятная итерация.И реализацию не всю можно сделать ,например вернуть строку не получится - ошибки появляются.
Честно, не вижу пока практического применения этих методов. Метод ради метода.