#13. Магические методы __str__, __repr__, __len__, __abs__ | ООП Python

  Рет қаралды 43,629

selfedu

selfedu

2 жыл бұрын

Курс по Python ООП: stepik.org/a/116336
Разбираем работу магических методов _str__, __repr__, __len__, __abs_ на простых примерах.
Инфо-сайт: proproprogs.ru/python_oop
Telegram-канал: t.me/python_selfedu

Пікірлер: 67
@ealbitg1043
@ealbitg1043 2 жыл бұрын
Неужели кто-то нормально объяснил магические методы. Спасибо огромное)
@user-sx2zv3lv5w
@user-sx2zv3lv5w 2 жыл бұрын
Сергей вы просто шикарен, лучший педагог, из всех кого я встречал. Спасибо огромное!
@leonardodebrycho5795
@leonardodebrycho5795 20 күн бұрын
Столько уроков уже прошло хоть бы позапоминать все эти методы).Спасибо за ваш труд отличный урок!
@user-js4yf3dv9g
@user-js4yf3dv9g Жыл бұрын
Наконецто тема, от которой не взрывается мозг)
@Bunkerniy_Gadenish
@Bunkerniy_Gadenish Жыл бұрын
тоже нравится кит кат?
@FanMel
@FanMel Жыл бұрын
Со временем всё будет понятно.Решайте практические задачи и изучайте пайтон)!
@vladimirastrelin1719
@vladimirastrelin1719 Жыл бұрын
Спасибо большое. Прекрасный урок, всё просто, понятно и наглядно
@igorratnik2357
@igorratnik2357 Жыл бұрын
Как всегда Большущее спасибо Сергей!
@_garik__
@_garik__ Жыл бұрын
Мир питона стал чуточку понятнее)) Спасибо)!
@sstartsev
@sstartsev 2 жыл бұрын
Отлично рассказано! Спасибо!
@bot_N666
@bot_N666 Жыл бұрын
Этот ролик был очень понятен, видимо простая тема, а некоторые в голову не хотят заходить.
@user-gy5zd1xl6c
@user-gy5zd1xl6c 8 ай бұрын
я сижу как обезяна питаюсь понять
@mikelir1889
@mikelir1889 2 жыл бұрын
в видео присутствует ОГОВОРКА: def f(*args): pass тип объекта args - tuple, то есть кортеж, но никак НЕ СПИСОК. курс отличный, спасибо большое
@selfedu_rus
@selfedu_rus 2 жыл бұрын
да, верно, есть такое )
@AndriiHaidai
@AndriiHaidai 2 жыл бұрын
Material is very good! It's the second video, where you cal it `underscoPe`. It has nothing to do with scope. It is `underscoRe`.
@selfedu_rus
@selfedu_rus 2 жыл бұрын
да, спасибо, что то заклинило ))
@dmitriivanov7010
@dmitriivanov7010 2 жыл бұрын
Спасибо, вы гуру)
@Dayplaylist
@Dayplaylist 2 жыл бұрын
Хорошее занятие ну когда уже я дойду до наследования😁
@alenwar5123
@alenwar5123 10 ай бұрын
Потрясающий урок
@AdmiralUshakovvv
@AdmiralUshakovvv 2 жыл бұрын
слушай ну надо отдать тебе должное, егоровчанелл хуже это обьяснил за первые два маджик метода))) ты лучший дядя)))
@andredru4278
@andredru4278 5 ай бұрын
Спасибо. Все просто.
@teacherit5840
@teacherit5840 Жыл бұрын
Круто, спасибо!
@abrorizzatullaev836
@abrorizzatullaev836 Жыл бұрын
so undestandable, amazing)
@user-serg_tlt
@user-serg_tlt 2 жыл бұрын
Спасибо. Всё ясно и понятно.
@dominica665
@dominica665 2 жыл бұрын
Серёга красава
@user-kl3gp8qw5w
@user-kl3gp8qw5w 2 жыл бұрын
underscore :-)
@user-nt7cg6ok6f
@user-nt7cg6ok6f 2 жыл бұрын
Я бы в качестве модуля взял длину радиус вектора, она часто полезнее бывает)😄
@user-qh8xd2bc7q
@user-qh8xd2bc7q 2 жыл бұрын
Хотелось бы видеть плейлист по пандасу
@user-ou7fw1sg1r
@user-ou7fw1sg1r 2 жыл бұрын
Вроде менее сложно чем предыдущий урок... Теперь бы не забыть это, что бы в нужной ситуации применить..
@x-user-agent
@x-user-agent 2 жыл бұрын
что бы не забывалось (ну или на по-дольше сохранилось в памяти 😁) нужна практика - пару-тройку раз написать всё это ручками🤪
@vovkodinak2416
@vovkodinak2416 3 ай бұрын
В конце ролика "#4 Метод __new__. Пример паттерна Singleton" было сказано об методе __call__. Я несколько раз пересмотрел текущий ролик #12, и я так и не понял, как можно применить метод __call__ к паттерну Singleton так, чтобы при создании очередного объекта типа Singleton его свойства оставались прежними.
@SuleimanVatrushkin
@SuleimanVatrushkin Жыл бұрын
большинство тем по пайтону нормально усваиваю, но с этими методами пока трудно очень. Но автору в любом случае спасибо
@ibrahimoglu
@ibrahimoglu 2 жыл бұрын
👍
@user-kt4yy5cf5e
@user-kt4yy5cf5e 2 жыл бұрын
Интересное интерпретирование __str__ для пользователей, __rerp__ для разработчиков, то есть человек пишущий код это пользователь)
@selfedu_rus
@selfedu_rus 2 жыл бұрын
в момент разработки и отладки - разработчик, а когда его плодами пользуются другие (или он сам), то пользователь
@user-cy8uj5qk7i
@user-cy8uj5qk7i 2 жыл бұрын
Класс кАт
@astivard
@astivard 2 жыл бұрын
Это фишка автора ))
@nicholasspezza9449
@nicholasspezza9449 2 жыл бұрын
@@astivard это не фишка, а пробел в знаниях, который режет слух образованным личностям. Странно почему он не "сат" (через эс) говорит)) Кстати, name, произносит верно)
@cryptokrupt
@cryptokrupt Жыл бұрын
@@nicholasspezza9449 В английском a произносится открыто, максимально похоже на русскую а. Почему все должно произносить слова только на "американский " манер. Это не резка слуха образованных личностей. Это обычное ханжество.
@user-rl7dv8qn7z
@user-rl7dv8qn7z 2 жыл бұрын
Еще можно так писать repr(cat) - выведет строку
@user-md6sq5gd9b
@user-md6sq5gd9b 2 жыл бұрын
Сергей здравствуйте.Вы не планируете сделать уроки по блокчейну и смартконтрактам на python? Было бы замечательно,даже если он будет платным..
@selfedu_rus
@selfedu_rus 2 жыл бұрын
пока нет
@uniqqquniqqq2053
@uniqqquniqqq2053 2 жыл бұрын
Можете пожалуйста объяснить про функцию str. Здесь ее применяют к классу str(Cat) и она показывает имя класса и ячейку в памяти. Но также если сделать str(123) то она уже превратит в строку число. Это одна и та же функция? Почему она делает разные вещи?
@Lord_Nodus
@Lord_Nodus 2 жыл бұрын
Я обычно использую __str__ и __repr__, чтобы менять отображение информации об объектах при дебаге. Ещё у меня бывало такое, что объекты отображались красным и не выводилась информация, это происходит из-за ошибки в методах, и в консоли такая ошибка не отображается
@user-rp7sg6eo4b
@user-rp7sg6eo4b 5 ай бұрын
о май Сааааааааааt
@GcJaster21322
@GcJaster21322 2 жыл бұрын
Я правильно понимаю, что к примеру метод str или len, которые мы можем применить к экземпляру класса и к объекту другого типа относятся к теме полиморфизма и я являются полиморфными? интерфейс по факту один но работает по разному?!
@selfedu_rus
@selfedu_rus 2 жыл бұрын
здесь функциями str и len вызываются магические методы __str__ и __len__ соответствующих объектов (самых разных) и это можно, на мой взгляд, считать полиморфизмом
@WitcherCoin
@WitcherCoin Жыл бұрын
А чего не сад?)
@VGCor
@VGCor Жыл бұрын
Почему в методе __str__ используется f-строка вместо простого return self.name? Получается f-строка преобразует полученное значение в тип str без вызова метода __str__?
@selfedu_rus
@selfedu_rus Жыл бұрын
метод __str__ возвращает строку, которая получается при применении функции str() к объекту класса
@ymnop9652
@ymnop9652 2 жыл бұрын
А почему 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
@rukigaki
@rukigaki 9 ай бұрын
Говоришь, что считаешь len 10-ти свойств, но при этом просто выводишь координаты(__coord_n) экземпляра класса. Причем абсолютно несуразным способом
@gienek_mscislawski
@gienek_mscislawski 2 жыл бұрын
Правильно ли я понял, что repr и str без переопределения работают одинаково?
@selfedu_rus
@selfedu_rus 2 жыл бұрын
да
@gienek_mscislawski
@gienek_mscislawski 2 жыл бұрын
@@selfedu_rus спасибо!
@shushanikpirumyan6299
@shushanikpirumyan6299 2 жыл бұрын
кто мне может обяснить self.__coords=ars. это прижатный атрибыт, а что значит =args?
@span4ev
@span4ev Жыл бұрын
Раньше боялся этих методов, поэтому даже не пытался понять что это. Ничего не поменялось. Это всё конечно интересно, но без понимания где и как это можно применить на практике, оно остаётся непонятным, потому что кажется ненужным. По сути всё это сводится к тому, что обращаться сразу к имени экземпляра класса, вместо того чтобы дописать имя метода, и получить тот же результат. Интересно, но пока точно не пригодится, потому что кажется избыточным. Вместо того чтобы прописывать __len__, return и всё до кучи, можно просто сделать так print(len(p.coords)) - будет длина того же самого списка. Результат точно такой же. К чему лишние строки кода, лишний метод? Про модули я ничего не понял, потому что я тупой и понятия не имею, что такое модули, но Вместо __str__ можно сразу обращаться к нужному атрибуту. Здесь я ещё могу как-то дофантазировать, что видимо вся суть в том, что мы можем не знать имя нужного атрибута, но прописав __str__ мы получим какую-то информацию, например, чтобы другой человек сразу получил какое-то представление о чём либо. Но всё равно это сложно представить, когда есть другие варианты. Например print() в самом методе. Видимо всё дело в универсальности, чтобы не зная имён атрибутов и методов в любом случае что-то выводить при обращении к экземпляру класса Я учу пайтон и понимаю - не зря я столько времени не лез в эти перечисленные методы.
@Heyrock
@Heyrock Жыл бұрын
прошу прощения: underscoRe
@user-tl4ur8ib1l
@user-tl4ur8ib1l Жыл бұрын
undrescoRe = __, underscoPe = недооценивать,
@selfedu_rus
@selfedu_rus Жыл бұрын
есть такое ))
@bigsmilefriend
@bigsmilefriend 2 жыл бұрын
У меня такое ощущение, что это не магические методы, а обычные функции. Вот я не могу понять, зачем нужен этот магический метод, если надо описывать его функционал? И что в нем магического, если он не работает без написания в классе. Например, если бы я вместо функции __len__ написал бы такую функцию: def length(self): return len(self.__coords) print(length(p)) В том, что есть специальная функция и ту что мы описали разницы нет, функционал одниаковый. Или я не прав? спасибо)
@selfedu_rus
@selfedu_rus 2 жыл бұрын
а как метод __call__, например, замените или метод __iter__ и так далее, не все так легко подменяются, да и функцию len другой заменять тоже не очень, т.к. это некий стандарт в Python
@VGCor
@VGCor Жыл бұрын
То есть для магического метода __ str__ есть соответствующая функция str, для магического метода __len__ имеется функция len, для __abs__ существует abs. НО! Для магического метода __repr__ не существует соответствующей функции? Как-то несправедливо получается ;)
@selfedu_rus
@selfedu_rus Жыл бұрын
repr используется самим интерпретатором Python и вызывает его в отладочных (служебных) целях
@orestlevit1663
@orestlevit1663 11 ай бұрын
Та не "Кат", а "Кэт".
@user-hp7pc3lv3v
@user-hp7pc3lv3v 2 жыл бұрын
В чем прикол __len__ и __abs__. Всё это с такой же лёгкостью можно сделать обычным методом
@selfedu_rus
@selfedu_rus 2 жыл бұрын
удобство и унификация кода на более общем уровне
Deep Focus - Music For Studying | Improve Your Focus - Study Music
Greenred Productions - Relaxing Music
Рет қаралды 119
Alex hid in the closet #shorts
00:14
Mihdens
Рет қаралды 13 МЛН
ЧУТЬ НЕ УТОНУЛ #shorts
00:27
Паша Осадчий
Рет қаралды 9 МЛН
Python dataclasses will save you HOURS, also featuring attrs
8:50
Зачем нужны указатели в C++?
8:14
Магические методы в python. Dunder методы
1:00:45
A Simpler Way to See Results
19:17
Logan Smith
Рет қаралды 101 М.
Тестирование с помощью Mock-ов в Python #1
15:38
Alex hid in the closet #shorts
00:14
Mihdens
Рет қаралды 13 МЛН