#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...

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

  • @ealbitg1043
    @ealbitg1043 2 года назад +21

    Неужели кто-то нормально объяснил магические методы. Спасибо огромное)

  • @lmishin_unscripted
    @lmishin_unscripted 2 года назад +20

    Сергей вы просто шикарен, лучший педагог, из всех кого я встречал. Спасибо огромное!

  • @user-js4yf3dv9g
    @user-js4yf3dv9g Год назад +13

    Наконецто тема, от которой не взрывается мозг)

    • @Bunkerniy_Gadenish
      @Bunkerniy_Gadenish Год назад +3

      тоже нравится кит кат?

    • @Qstgggg
      @Qstgggg Год назад +1

      Со временем всё будет понятно.Решайте практические задачи и изучайте пайтон)!

  • @leonardodebrycho5795
    @leonardodebrycho5795 2 месяца назад +1

    Столько уроков уже прошло хоть бы позапоминать все эти методы).Спасибо за ваш труд отличный урок!

  • @mikelir1889
    @mikelir1889 2 года назад +5

    в видео присутствует ОГОВОРКА:
    def f(*args):
    pass
    тип объекта args - tuple, то есть кортеж, но никак НЕ СПИСОК.
    курс отличный, спасибо большое

    • @selfedu_rus
      @selfedu_rus  2 года назад +7

      да, верно, есть такое )

  • @igorratnik2357
    @igorratnik2357 Год назад +3

    Как всегда Большущее спасибо Сергей!

  • @bot_N666
    @bot_N666 Год назад +3

    Этот ролик был очень понятен, видимо простая тема, а некоторые в голову не хотят заходить.

    • @Jevelin4kNone
      @Jevelin4kNone 10 месяцев назад

      я сижу как обезяна питаюсь понять

  • @jaksonmillka
    @jaksonmillka 2 дня назад +1

    Урок #13 = Пройден
    У меня есть понимание что это нужно знать, но честно говоря, когда слишком много магических методов, и тем более, если они практически не будут применяться, начинаю зевать, как будто на скучной лекции.
    Надеюсь хоть какой-то из них пригодится )

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

    Мир питона стал чуточку понятнее)) Спасибо)!

  • @sstartsev
    @sstartsev 2 года назад +5

    Отлично рассказано! Спасибо!

  • @AndriiHaidai
    @AndriiHaidai 2 года назад +6

    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 года назад +1

      да, спасибо, что то заклинило ))

  • @dmitriivanov7010
    @dmitriivanov7010 2 года назад +3

    Спасибо, вы гуру)

  • @AdmiralUshakovvv
    @AdmiralUshakovvv 2 года назад +3

    слушай ну надо отдать тебе должное, егоровчанелл хуже это обьяснил за первые два маджик метода)))
    ты лучший дядя)))

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

    Хорошее занятие ну когда уже я дойду до наследования😁

  • @alenwar5123
    @alenwar5123 Год назад +1

    Потрясающий урок

  • @andredru4278
    @andredru4278 6 месяцев назад +1

    Спасибо. Все просто.

  • @abrorizzatullaev836
    @abrorizzatullaev836 Год назад +1

    so undestandable, amazing)

  • @ЮрийТакаев-ч5ы
    @ЮрийТакаев-ч5ы 2 года назад +6

    underscore :-)

  • @vovkodinak2416
    @vovkodinak2416 5 месяцев назад

    В конце ролика "#4 Метод __new__. Пример паттерна Singleton" было сказано об методе __call__. Я несколько раз пересмотрел текущий ролик #12, и я так и не понял, как можно применить метод __call__ к паттерну Singleton так, чтобы при создании очередного объекта типа Singleton его свойства оставались прежними.

  • @user-serg_tlt
    @user-serg_tlt 2 года назад +4

    Спасибо. Всё ясно и понятно.

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

    Серёга красава

  • @андрейхоменко-и5я
    @андрейхоменко-и5я 2 года назад +3

    Вроде менее сложно чем предыдущий урок... Теперь бы не забыть это, что бы в нужной ситуации применить..

    • @x-user-agent
      @x-user-agent 2 года назад +5

      что бы не забывалось (ну или на по-дольше сохранилось в памяти 😁) нужна практика - пару-тройку раз написать всё это ручками🤪

  • @user-qh8xd2bc7q
    @user-qh8xd2bc7q 2 года назад +2

    Хотелось бы видеть плейлист по пандасу

  • @SuleimanVatrushkin
    @SuleimanVatrushkin Год назад +2

    большинство тем по пайтону нормально усваиваю, но с этими методами пока трудно очень. Но автору в любом случае спасибо

  • @МихаилХолостов-р1п
    @МихаилХолостов-р1п 2 года назад +2

    Класс кАт

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

      Это фишка автора ))

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

      @@astivard это не фишка, а пробел в знаниях, который режет слух образованным личностям. Странно почему он не "сат" (через эс) говорит)) Кстати, name, произносит верно)

    • @cryptokrupt
      @cryptokrupt Год назад +1

      @@nicholasspezza9449 В английском a произносится открыто, максимально похоже на русскую а. Почему все должно произносить слова только на "американский " манер. Это не резка слуха образованных личностей. Это обычное ханжество.

  • @ЯрославБеляев-т5к
    @ЯрославБеляев-т5к 2 года назад +2

    Я бы в качестве модуля взял длину радиус вектора, она часто полезнее бывает)😄

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

    Круто, спасибо!

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

    Раньше боялся этих методов, поэтому даже не пытался понять что это. Ничего не поменялось. Это всё конечно интересно, но без понимания где и как это можно применить на практике, оно остаётся непонятным, потому что кажется ненужным.
    По сути всё это сводится к тому, что обращаться сразу к имени экземпляра класса, вместо того чтобы дописать имя метода, и получить тот же результат.
    Интересно, но пока точно не пригодится, потому что кажется избыточным.
    Вместо того чтобы прописывать __len__, return и всё до кучи, можно просто сделать так
    print(len(p.coords)) - будет длина того же самого списка. Результат точно такой же. К чему лишние строки кода, лишний метод?
    Про модули я ничего не понял, потому что я тупой и понятия не имею, что такое модули, но
    Вместо __str__ можно сразу обращаться к нужному атрибуту. Здесь я ещё могу как-то дофантазировать, что видимо вся суть в том, что мы можем не знать имя нужного атрибута, но прописав __str__ мы получим какую-то информацию, например, чтобы другой человек сразу получил какое-то представление о чём либо. Но всё равно это сложно представить, когда есть другие варианты. Например print() в самом методе.
    Видимо всё дело в универсальности, чтобы не зная имён атрибутов и методов в любом случае что-то выводить при обращении к экземпляру класса
    Я учу пайтон и понимаю - не зря я столько времени не лез в эти перечисленные методы.

  • @Lord_Nodus
    @Lord_Nodus 2 года назад +3

    Я обычно использую __str__ и __repr__, чтобы менять отображение информации об объектах при дебаге. Ещё у меня бывало такое, что объекты отображались красным и не выводилась информация, это происходит из-за ошибки в методах, и в консоли такая ошибка не отображается

  • @МаксимАндреев-я1г
    @МаксимАндреев-я1г 2 года назад +1

    Интересное интерпретирование __str__ для пользователей, __rerp__ для разработчиков, то есть человек пишущий код это пользователь)

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

      в момент разработки и отладки - разработчик, а когда его плодами пользуются другие (или он сам), то пользователь

  • @АлександрКоротеев-я2ы

    Сергей здравствуйте.Вы не планируете сделать уроки по блокчейну и смартконтрактам на python? Было бы замечательно,даже если он будет платным..

  • @КостяГорохов-б6с
    @КостяГорохов-б6с 2 года назад +1

    Еще можно так писать repr(cat) - выведет строку

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

    Можете пожалуйста объяснить про функцию str. Здесь ее применяют к классу str(Cat) и она показывает имя класса и ячейку в памяти.
    Но также если сделать str(123) то она уже превратит в строку число. Это одна и та же функция? Почему она делает разные вещи?

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

    👍

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

    А почему 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 11 месяцев назад

      Говоришь, что считаешь len 10-ти свойств, но при этом просто выводишь координаты(__coord_n) экземпляра класса. Причем абсолютно несуразным способом

  • @WitcherCoin
    @WitcherCoin Год назад +1

    А чего не сад?)

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

    Я правильно понимаю, что к примеру метод str или len, которые мы можем применить к экземпляру класса и к объекту другого типа относятся к теме полиморфизма и я являются полиморфными? интерфейс по факту один но работает по разному?!

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

      здесь функциями str и len вызываются магические методы __str__ и __len__ соответствующих объектов (самых разных) и это можно, на мой взгляд, считать полиморфизмом

  • @user-rp7sg6eo4b
    @user-rp7sg6eo4b 7 месяцев назад +1

    о май Сааааааааааt

  • @VGCor
    @VGCor Год назад

    Почему в методе __str__ используется f-строка вместо простого return self.name? Получается f-строка преобразует полученное значение в тип str без вызова метода __str__?

    • @selfedu_rus
      @selfedu_rus  Год назад

      метод __str__ возвращает строку, которая получается при применении функции str() к объекту класса

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

    Правильно ли я понял, что repr и str без переопределения работают одинаково?

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

    У меня такое ощущение, что это не магические методы, а обычные функции.
    Вот я не могу понять, зачем нужен этот магический метод, если надо описывать его функционал? И что в нем магического, если он не работает без написания в классе.
    Например, если бы я вместо функции __len__ написал бы такую функцию:
    def length(self):
    return len(self.__coords)
    print(length(p))
    В том, что есть специальная функция и ту что мы описали разницы нет, функционал одниаковый.
    Или я не прав?
    спасибо)

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

      а как метод __call__, например, замените или метод __iter__ и так далее, не все так легко подменяются, да и функцию len другой заменять тоже не очень, т.к. это некий стандарт в Python

  • @НурланБайбатыров-ю5м

    undrescoRe = __, underscoPe = недооценивать,

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

    кто мне может обяснить self.__coords=ars. это прижатный атрибыт, а что значит =args?

  • @Heyrock
    @Heyrock Год назад +1

    прошу прощения: underscoRe

  • @orestlevit1663
    @orestlevit1663 Год назад

    Та не "Кат", а "Кэт".

  • @VGCor
    @VGCor Год назад

    То есть для магического метода __ str__ есть соответствующая функция str, для магического метода __len__ имеется функция len, для __abs__ существует abs. НО! Для магического метода __repr__ не существует соответствующей функции? Как-то несправедливо получается ;)

    • @selfedu_rus
      @selfedu_rus  Год назад +1

      repr используется самим интерпретатором Python и вызывает его в отладочных (служебных) целях

  • @НикН-о7о
    @НикН-о7о 2 года назад

    В чем прикол __len__ и __abs__. Всё это с такой же лёгкостью можно сделать обычным методом

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

      удобство и унификация кода на более общем уровне