#13. Магические методы __str__, __repr__, __len__, __abs__ | ООП Python
HTML-код
- Опубликовано: 20 сен 2024
- Курс по Python ООП: stepik.org/a/1...
Разбираем работу магических методов _str__, __repr__, __len__, __abs_ на простых примерах.
Инфо-сайт: proproprogs.ru...
Telegram-канал: t.me/python_se...
Неужели кто-то нормально объяснил магические методы. Спасибо огромное)
Сергей вы просто шикарен, лучший педагог, из всех кого я встречал. Спасибо огромное!
Наконецто тема, от которой не взрывается мозг)
тоже нравится кит кат?
Со временем всё будет понятно.Решайте практические задачи и изучайте пайтон)!
Столько уроков уже прошло хоть бы позапоминать все эти методы).Спасибо за ваш труд отличный урок!
в видео присутствует ОГОВОРКА:
def f(*args):
pass
тип объекта args - tuple, то есть кортеж, но никак НЕ СПИСОК.
курс отличный, спасибо большое
да, верно, есть такое )
Как всегда Большущее спасибо Сергей!
Этот ролик был очень понятен, видимо простая тема, а некоторые в голову не хотят заходить.
я сижу как обезяна питаюсь понять
Урок #13 = Пройден
У меня есть понимание что это нужно знать, но честно говоря, когда слишком много магических методов, и тем более, если они практически не будут применяться, начинаю зевать, как будто на скучной лекции.
Надеюсь хоть какой-то из них пригодится )
Мир питона стал чуточку понятнее)) Спасибо)!
Отлично рассказано! Спасибо!
Material is very good! It's the second video, where you cal it `underscoPe`. It has nothing to do with scope. It is `underscoRe`.
да, спасибо, что то заклинило ))
Спасибо, вы гуру)
слушай ну надо отдать тебе должное, егоровчанелл хуже это обьяснил за первые два маджик метода)))
ты лучший дядя)))
Хорошее занятие ну когда уже я дойду до наследования😁
Потрясающий урок
Спасибо. Все просто.
so undestandable, amazing)
underscore :-)
В конце ролика "#4 Метод __new__. Пример паттерна Singleton" было сказано об методе __call__. Я несколько раз пересмотрел текущий ролик #12, и я так и не понял, как можно применить метод __call__ к паттерну Singleton так, чтобы при создании очередного объекта типа Singleton его свойства оставались прежними.
Спасибо. Всё ясно и понятно.
Серёга красава
Вроде менее сложно чем предыдущий урок... Теперь бы не забыть это, что бы в нужной ситуации применить..
что бы не забывалось (ну или на по-дольше сохранилось в памяти 😁) нужна практика - пару-тройку раз написать всё это ручками🤪
Хотелось бы видеть плейлист по пандасу
большинство тем по пайтону нормально усваиваю, но с этими методами пока трудно очень. Но автору в любом случае спасибо
Класс кАт
Это фишка автора ))
@@astivard это не фишка, а пробел в знаниях, который режет слух образованным личностям. Странно почему он не "сат" (через эс) говорит)) Кстати, name, произносит верно)
@@nicholasspezza9449 В английском a произносится открыто, максимально похоже на русскую а. Почему все должно произносить слова только на "американский " манер. Это не резка слуха образованных личностей. Это обычное ханжество.
Я бы в качестве модуля взял длину радиус вектора, она часто полезнее бывает)😄
Круто, спасибо!
Раньше боялся этих методов, поэтому даже не пытался понять что это. Ничего не поменялось. Это всё конечно интересно, но без понимания где и как это можно применить на практике, оно остаётся непонятным, потому что кажется ненужным.
По сути всё это сводится к тому, что обращаться сразу к имени экземпляра класса, вместо того чтобы дописать имя метода, и получить тот же результат.
Интересно, но пока точно не пригодится, потому что кажется избыточным.
Вместо того чтобы прописывать __len__, return и всё до кучи, можно просто сделать так
print(len(p.coords)) - будет длина того же самого списка. Результат точно такой же. К чему лишние строки кода, лишний метод?
Про модули я ничего не понял, потому что я тупой и понятия не имею, что такое модули, но
Вместо __str__ можно сразу обращаться к нужному атрибуту. Здесь я ещё могу как-то дофантазировать, что видимо вся суть в том, что мы можем не знать имя нужного атрибута, но прописав __str__ мы получим какую-то информацию, например, чтобы другой человек сразу получил какое-то представление о чём либо. Но всё равно это сложно представить, когда есть другие варианты. Например print() в самом методе.
Видимо всё дело в универсальности, чтобы не зная имён атрибутов и методов в любом случае что-то выводить при обращении к экземпляру класса
Я учу пайтон и понимаю - не зря я столько времени не лез в эти перечисленные методы.
Я обычно использую __str__ и __repr__, чтобы менять отображение информации об объектах при дебаге. Ещё у меня бывало такое, что объекты отображались красным и не выводилась информация, это происходит из-за ошибки в методах, и в консоли такая ошибка не отображается
Интересное интерпретирование __str__ для пользователей, __rerp__ для разработчиков, то есть человек пишущий код это пользователь)
в момент разработки и отладки - разработчик, а когда его плодами пользуются другие (или он сам), то пользователь
Сергей здравствуйте.Вы не планируете сделать уроки по блокчейну и смартконтрактам на python? Было бы замечательно,даже если он будет платным..
пока нет
Еще можно так писать repr(cat) - выведет строку
Можете пожалуйста объяснить про функцию str. Здесь ее применяют к классу str(Cat) и она показывает имя класса и ячейку в памяти.
Но также если сделать str(123) то она уже превратит в строку число. Это одна и та же функция? Почему она делает разные вещи?
👍
А почему print(len(p)) Не работает по умолчанию для экземпляров класса?
class Point:
def __init__(self, *args):
self.coords = args
def show_len(self):
return len(self.coords)
p = Point(1, 2)
print(p.show_len())
Вот например так лен работать будет, а почему print(len(p)) так нет?
А если скажем если нам нужно считать len 10ти свойств класса, нам нужно будет дикое дерево if else в магическом методе __len__ делать?
if self.__coords_1:
return self.__coords_1
...
elif self.__coords_99:
return self.__coords_99
Говоришь, что считаешь len 10-ти свойств, но при этом просто выводишь координаты(__coord_n) экземпляра класса. Причем абсолютно несуразным способом
А чего не сад?)
Я правильно понимаю, что к примеру метод str или len, которые мы можем применить к экземпляру класса и к объекту другого типа относятся к теме полиморфизма и я являются полиморфными? интерфейс по факту один но работает по разному?!
здесь функциями str и len вызываются магические методы __str__ и __len__ соответствующих объектов (самых разных) и это можно, на мой взгляд, считать полиморфизмом
о май Сааааааааааt
Почему в методе __str__ используется f-строка вместо простого return self.name? Получается f-строка преобразует полученное значение в тип str без вызова метода __str__?
метод __str__ возвращает строку, которая получается при применении функции str() к объекту класса
Правильно ли я понял, что repr и str без переопределения работают одинаково?
да
@@selfedu_rus спасибо!
У меня такое ощущение, что это не магические методы, а обычные функции.
Вот я не могу понять, зачем нужен этот магический метод, если надо описывать его функционал? И что в нем магического, если он не работает без написания в классе.
Например, если бы я вместо функции __len__ написал бы такую функцию:
def length(self):
return len(self.__coords)
print(length(p))
В том, что есть специальная функция и ту что мы описали разницы нет, функционал одниаковый.
Или я не прав?
спасибо)
а как метод __call__, например, замените или метод __iter__ и так далее, не все так легко подменяются, да и функцию len другой заменять тоже не очень, т.к. это некий стандарт в Python
undrescoRe = __, underscoPe = недооценивать,
есть такое ))
кто мне может обяснить self.__coords=ars. это прижатный атрибыт, а что значит =args?
прошу прощения: underscoRe
Та не "Кат", а "Кэт".
То есть для магического метода __ str__ есть соответствующая функция str, для магического метода __len__ имеется функция len, для __abs__ существует abs. НО! Для магического метода __repr__ не существует соответствующей функции? Как-то несправедливо получается ;)
repr используется самим интерпретатором Python и вызывает его в отладочных (служебных) целях
В чем прикол __len__ и __abs__. Всё это с такой же лёгкостью можно сделать обычным методом
удобство и унификация кода на более общем уровне