Магические методы в python. Dunder методы

Поділитися
Вставка
  • Опубліковано 22 лис 2024

КОМЕНТАРІ • 95

  • @F_C_T_L
    @F_C_T_L Рік тому +23

    Спасибо за ваши уроки! Начиная учить Python вы мне очень помогли плавно войти в эту сложную тему, и вот уже прошло 6 месяцев с момента начала. Я окончательно определился с направлением, это Backend разработка, и уже довольно хорошо знаю Django. Вспомнив себя тогда, мне это всё казалось таким сложным и непонятным, а теперь всё выглядит намного легче. Хорошо что вы рассказываете всё простым языком и всегда ссылаетесь на надёжных авторов.

    • @PythonRussian
      @PythonRussian  Рік тому +3

      спасибо вам за отзыв и успехов во всем!

    • @orion_1223
      @orion_1223 Рік тому +1

      Вы сказали, что довольно неплохо знаете django. Подскажите, пжст, (я освоил базу питона + базовое ООП, поразбирался с тем, что такое инет, как это работает - запросы, протоколы, респонсы и тд; подосвоил sql, , и теперь перехожу к django, djangorest framework) посмотрел много разных курсов, подчитал документацию, начал немного идти в книги, но не могу найти нигде адекватной структуриванного объяснения как что работает(одни сплошные наследования от наследований и наследованиями поганяют), и самое главное нигде нет практики - в большинстве случаев “смотри, что пишу я и повторяй за мной». Подскажите где найти нормальный материал по изучению джанго с нормальной практикой, для приобретения навыков. Спасибо за ответ

    • @F_C_T_L
      @F_C_T_L Рік тому +6

      ​@@orion_1223 Вы правильно сделали, что начали всё учить постепенно, так вам будет намного легче, а по поводу практики мне кажется вы не найдёте хороших курсов с практикой. Лично мне ничто так не прибавляло в знаниях, как собственные проекты, и это нормально если вы изначально не знаете как их реализовывать, это даже хорошо, значит данный проект сможет вас чему-то научить. Из всех собственный проектов что я начинал, я не знал как реализовать ни один, всё понимал по ходу написания. Мой первый проект - сайт рецептов, где пользователи могут искать рецепты по категориям либо используя поиск, а так же могут сохраняться рецепты в свой профиль, что бы затем их быстро находить. Можете попробовать реализовать похожий проект. После того как поймёте что такие проекты для вас уже не слишком сложны, проходите курсы по узким темам например научитесь тестировать свой проект и т.д, благо на stepik'е или аналогичных платформах их полно, а там уже можно и работу искать ) По поводу архитектуры, Django из коробки создаёт архитектуру и показывает как, где, по каким директория всё должно находится это нужно либо запомнить либо много практиковаться пока самому интуитивно не станет понятно, а в том что в Django всё от всего наследуется нет ничего страшного, вам не нужно пытатся понять как всё работет на самом низком уровне, изучая каждый класс, конечно есть классы которые нужно знать, но их не слишком много, для этого и существует Django что бы все низкие процессы скрывать и предоставить вам только удобный инструмент разработки.

    • @orion_1223
      @orion_1223 Рік тому +2

      @@F_C_T_L Спасибо, Вы подтвердили мои предположения: приблизительно так и думал, но теперь окончательно убедился, что путь только через собственный проект. Буду пробовать дальше. Вам также успехов в обучении и работе

    • @F_C_T_L
      @F_C_T_L Рік тому +2

      @@orion_1223 Спасибо!

  • @n_sta5850
    @n_sta5850 7 місяців тому +2

    Автору Спасибо! Это лучшая подача материала, которую я встречал на UA-cam, даже в сравнении с англоязычными ресурсами!

    • @anton-18
      @anton-18 5 місяців тому

      Ты наверное неправильно гуглил:)

  • @Developer_python_
    @Developer_python_ Рік тому +3

    Все знаю но сильно кайфую от структуры подачи!

  • @germanborisov1765
    @germanborisov1765 Рік тому +1

    Объемное и полноценное видео про Dunder методы. Разобраны и (!)проиллюстрированы на практике(!) наиболее часто используемые магические методы. Большое спасибо! Если кто-то залез в комментарии, сомневаясь, стоит ли смотреть - настоятельно рекомендую к просмотру!!!

  • @khirsan270
    @khirsan270 6 місяців тому +2

    Так и запишем. Программисты и люди это разные вещи, несовместимые друг с другом.
    10:07

  • @Vladimir-bz9tg
    @Vladimir-bz9tg Рік тому +1

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

  • @Прогулкивокругсвета-ф2ю

    Вау, как все классно реализовано в Пайтон, это ведь какие интересные штуки можно при помощи этих методов сделать 🤯

  • @Hanson-e4m
    @Hanson-e4m Рік тому

    Спасибо большое за предоставленный материал для изучения. Хорошая дикция автора и элегантная подача материала приложена.

  • @drevosv
    @drevosv Рік тому +1

    Отличное видео! Всё показано просто и доступно. Спасибо огромное!

  • @ЭдуардЗвонарёв-л9щ
    @ЭдуардЗвонарёв-л9щ 2 місяці тому

    Огромное спасибо за Ваши старания. Крайне полезное видео ❤️‍🔥

  • @andrewpuchinin8547
    @andrewpuchinin8547 Рік тому +3

    Почему так мало лайков??? А ну-ка поднажмите, народ)) Видео отличные, спасибо за канал! Особенно нравится опыт про собеседования и ошибки новичков. Это сразу отсекает много ошибок и экономит время, и вообще это то, о чем не говорят во многих и многих обучалках.

  • @elnurmaharramov9319
    @elnurmaharramov9319 Рік тому

    Спасибо Вам за труд ! Дай Бог здоровья

  • @ArntorRUS
    @ArntorRUS 4 місяці тому

    Спасибо, очень подробный разбор!

  • @databox4279
    @databox4279 Рік тому

    Как всегда великолепное объяснение. Никто другой по данной теме не сказал, что eval может создать проблемы.
    В pycharm можно добавить русский язык, чтобы он не подчеркивал русские слова в комментариях, но я думаю что Вы и без меня это знаете.

  • @АлександрМайстришин-д7х

    Все видео крутые, подача хорошая, все понятно! спасибо!)

  • @abra-kadabra5000
    @abra-kadabra5000 Рік тому

    Большое спасибо! Очень доступно и полезно!

  • @BRED_Sosed2024
    @BRED_Sosed2024 Рік тому +1

    Благодарю, супер!

  • @Laserball74
    @Laserball74 Рік тому

    Отличный мастер класс!!!

  • @Ssilki_V_Profile
    @Ssilki_V_Profile Рік тому +1

    Методы арифметического соавнения тоже необходимо предварить проверками типов. Если типы не совпадают - либо возвращать False, либо кидать TypeError.

  • @Akim_Edmundovich
    @Akim_Edmundovich 5 місяців тому

    Спасибо тебе большое! 😊

  • @walibabajanov3751
    @walibabajanov3751 Рік тому +1

    Спасибо

  • @barma1309
    @barma1309 Рік тому +1

    спасибо!

  • @Ssilki_V_Profile
    @Ssilki_V_Profile Рік тому +1

    Сравнение прописанных атрибутов обычно не достаточно. Желательно сравнить ВСЕХ атрибутов.
    То есть, надо сравнивать через __dict__

  • @lukasmog777
    @lukasmog777 Рік тому +2

    Все круто!
    И звук и шрифт!
    Спасибо за видео!)

  • @user-buser_eto_ja
    @user-buser_eto_ja 9 місяців тому +1

    Спасбо!

  • @Daloshka
    @Daloshka Рік тому +1

    Лучший урок) Пасибо

  • @x-user-agent
    @x-user-agent Рік тому +1

    такое ощущение что человек другой 😁 голос едва узнаётся) а звук - отличный

    • @PythonRussian
      @PythonRussian  Рік тому +1

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

  • @Miron_Nicolaevich
    @Miron_Nicolaevich Рік тому

    годный контент! так же интересно узнать подробнее о документировании кода)

  • @Chanel_for_CODE
    @Chanel_for_CODE 5 місяців тому

    Отличная подача! В преподаватели бы))))

    • @PythonRussian
      @PythonRussian  5 місяців тому

      не, для этого призвание нужно, а я для удовольствия делюсь по мере времени свободного. Хотя может на пенсии и запилю курсик)

  • @ИгорьТолчинский
    @ИгорьТолчинский 8 місяців тому +1

    Спасибо! Очень наглядно. Однако, по-моему, есть ошибка при описаниях методов (около 52 минуты +/-): при проверке верхней границы допустимого диапазона len() следовало бы уменьшить на 1. С вашим набором len= 3, однако, [3] уже "аут")))

  • @stalker7999
    @stalker7999 Рік тому +1

    Молодец очень классно и превью классное очень подходят персонаж из фалаута

    • @PythonRussian
      @PythonRussian  Рік тому +1

      спасибо, фоллаут запал в душу с самой первой части, вот и решил использовать.

  • @vitas_shlun
    @vitas_shlun Рік тому +2

    Видео полезное. спасибо, но я полчаса гуглил что такое "new*" при создании класса в пайтоне!!! Потом дошло что это pycharm добавляет))

    • @PythonRussian
      @PythonRussian  Рік тому

      это недавно появилось в пичарме, я что-то даже не подумал на этом заострить внимание, в следующем видео предупрежу зрителей, спасибо

  • @AnatoliyDekorstyle
    @AnatoliyDekorstyle Рік тому +1

    Видео как всегда прямо как бальзам на ... новичку!!! Спасибо большое! Можно практический вопрос - насчет метода __getitem__ - правильно ли я понял, что он может полноценно заменить next и iter? к тому же позволяет многократно итерировать объект. Это ж экономия кода получается хорошая: реализуешь геттер для колекций и паралельно итер и некст!!! Или есть подводные камни?

    • @PythonRussian
      @PythonRussian  Рік тому +1

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

  • @rektifikator
    @rektifikator Рік тому +1

    Полезное видео!
    Ещё можно было менеджер контекста добавить, или по нему отдельно ?

    • @PythonRussian
      @PythonRussian  Рік тому

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

  • @Miron_Nicolaevich
    @Miron_Nicolaevich Рік тому +1

    расскажи когда-нибудь про абстрактные методы и классы

  • @gafiatulineduard9365
    @gafiatulineduard9365 9 місяців тому +1

    Нужно сменить оформление , имена методов плохо читаются на текущем фоне.

  • @andreidelido6466
    @andreidelido6466 6 місяців тому

    спасибо автору за хорошую подачу материала.
    Есть вопрос - в чем отличие вызова, к примеру, маг.метод __cal__ и обычного обозначения (не магического) метода? На выходе результат одинаковый...

    • @PythonRussian
      @PythonRussian  6 місяців тому

      если в твоем классе есть метод __call__ то его объект можно вызвать как функцию, например cat=Cat(); cat() # тут будет вызван метод колл

    • @andreidelido6466
      @andreidelido6466 6 місяців тому

      @@PythonRussian Благодарю за пояснение.
      У вас есть видео, где вы разбираете какие-то задачи по ООП, может на других платформах?

    • @PythonRussian
      @PythonRussian  6 місяців тому

      @@andreidelido6466 нет, такого не снимал

    • @andreidelido6466
      @andreidelido6466 6 місяців тому

      @@PythonRussian жаль, было бы здорово, еще раз скажу - очень хорошая подача материала

  • @databox4279
    @databox4279 7 місяців тому

    Добрый вечер. Чат GPT подкинул код, чтобы не писать отдельный класс для возможности несколько раз итерироваться по одному и тому же объекту:
    def __iter__(self):
    self.current = 0
    return self
    Или это плохая идея и реализация с отдельным классом в чем-то лучше? Заранее благодарю за ответ.

  • @benben-fz2es
    @benben-fz2es 8 місяців тому

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

    • @PythonRussian
      @PythonRussian  8 місяців тому

      ну да, итераторы - одноразовые, нельзя их постоянно использовать, надо пересоздавать.

  • @swaytornado8327
    @swaytornado8327 Рік тому

    не удается справится с домашним заданием, т.к. ты в пример заложил свою логику, и теперь не понятно как из списка доставать значения, если у экземпляров нет атрибута balance, на это выводится вот такое сообщение Банкнота номиналом в 50 рублей. А как же тогда внутри класса достать его value, если в методе __add__могут быть всего два параметра __add__(self, other). И чтобы достать значение из списка нужен ключ, можешь как-то продолжить реализацию этого класса и показать, как это можно сделать, спасибо. Материал отменный, помогает в освоении практических примеров, но пока тяжело самому писать.

  • @plintuz
    @plintuz Рік тому

    Спасибо, отлично объясняете! Подскажите, что за плагин подсказывает над методами: new*

    • @PythonRussian
      @PythonRussian  Рік тому

      нет плагина, это новый пичарм про так себя ведет

  • @exfell320
    @exfell320 Рік тому

    Можете ответить,пожалуйста, вот если например написать переменную и поставить после неё точку, то после неё вылезет в пайчарме очень большое количество дандр методов, например a.(__main__, __dir__,и тд), там их очень много, это относится к ооп?

    • @PythonRussian
      @PythonRussian  Рік тому +1

      ну да, в питоне все является объектом, пичарм пытается угадать атрибут нужный.

  • @swaytornado8327
    @swaytornado8327 Рік тому

    а скажи пожалуйста, что эта за такая пометка у тебя в Pycharm видна была возле класса и методов - new*

    • @PythonRussian
      @PythonRussian  Рік тому

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

  • @f1n1st13
    @f1n1st13 Місяць тому

    Отличный материал, Спасибо. Но я так и не понял одно: если итератор реализует только некст а итерабл только итер, то зачем в итераторах от встроенных контейнеров есть и итер и некст?

    • @PythonRussian
      @PythonRussian  Місяць тому +1

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

  • @ИльяБайков-ь9к
    @ИльяБайков-ь9к Рік тому +1

    Отличное видео , разобрался с темой. Подскажите тему в Pcharm и практический вопрос - Можно ли удалить экземпляр класса из самого класса ? ( если не удалять, то хотя бы присвоить экземпляру None или 0 ). Спасибо

    • @PythonRussian
      @PythonRussian  Рік тому

      навскидку - нет. Сам представь, у кого то есть ссылка на экземпляр, а ты как то из-за кулис подменишь ссылку? или подменишь содержимое в памяти? Единственное что вполне возможно - заменить состояние, то есть сделать в объекте все данные 0 или Нан. Но и то для этого ты должен в самом классе где то хранить ссылки на все экземпляры.

    • @denk2k
      @denk2k Рік тому +1

      А тема в PyCharm вроде бы Dark Purple

    • @PythonRussian
      @PythonRussian  Рік тому +1

      @@denk2k да, давно мне полюбилась

    • @ИльяБайков-ь9к
      @ИльяБайков-ь9к Рік тому

      @@PythonRussian Спасибо за ответ

    • @PythonRussian
      @PythonRussian  Рік тому

      @@ИльяБайков-ь9к но если ты такой способ найдешь -поделись. =)

  • @maffioznik4500
    @maffioznik4500 Рік тому

    Здравствуйте, подскажите, что за оформление в pycharm

    • @PythonRussian
      @PythonRussian  Рік тому

      если вы про тему, то это Deep Purple, включить можно через плагины в настройках

  • @НикитаЛ-о3ч
    @НикитаЛ-о3ч Рік тому

    хорошо что у тебя теперь нормальный микрофон

  • @ТОП10-ь3й
    @ТОП10-ь3й Рік тому +1

    Здравствуйте а на фрилансе как с пайтаном много заказов

    • @PythonRussian
      @PythonRussian  Рік тому +1

      если вопрос ко мне то я не знаю, никогда не голодал)) Если серьезно, то теоретически должно быть много ибо он популярен, дата сатанизм +боты. Но это не точно.

    • @PythonRussian
      @PythonRussian  Рік тому

      @Серега Мичурин да, собирательный термин про ИИ, МЛ и прочие панды

  • @xesax
    @xesax 11 місяців тому

    5:00 так и знал что программисты не люди.

  • @montecristo31
    @montecristo31 Рік тому

    нельзя просто в eq добавить other: Banknote? Типо что other должен быть экземпляром Banknote.

    • @PythonRussian
      @PythonRussian  Рік тому

      можно, но аннотация -это лишь рекомендация, сунуть то могут что угодно

    • @ДенисМедведев-о7д
      @ДенисМедведев-о7д 11 місяців тому

      @@PythonRussian Сунуть-то могут что угодно, но примет только банкноту. Разве не упадёт исключение, что ожидалась банкнота, а вы мне инт суёте, например?

  • @Daloshka
    @Daloshka Рік тому

    А почему бы просто index=0 не перенести внутрь функции
    def __iter__(self):
    index = 0

    • @benben-fz2es
      @benben-fz2es 8 місяців тому

      Могут бежать два итератора одновременно - в многопоточке.

  • @Daloshka
    @Daloshka Рік тому

    Не досмотрел пару секунд и написал)
    Для оптимизации можно контейнер для __bool__ переписать:
    def __bool__(self):
    return self.container is not []

  • @smile_of_despair
    @smile_of_despair Рік тому

    Пони?

  • @NazguloneofniNazguloneofni
    @NazguloneofniNazguloneofni Рік тому +1

    Ахаххах repr для программистов, а str для людей аххахах. print("Программист не человек")

  • @Ssilki_V_Profile
    @Ssilki_V_Profile Рік тому +1

    eval is evil

  • @ИТз-212КиселёвАлександр

    Программисты не люди😢

  • @pfk9025
    @pfk9025 3 місяці тому

    Спасибо за контент! Как всегда на высшем уровне!
    Понимаю, что цель видео это показать как работает "магия", но...
    а что если нужны переборы, индексы и прочее богатство просто не пронаследоваться от list?
    class Wallet(list):
    def __init__(self, *banknotes: Banknote):
    super().__init__(banknotes)
    Насколько это хорошая/плохая идея?

    • @PythonRussian
      @PythonRussian  3 місяці тому

      это не просто хорошая -это правильная идея, не нужно писать то, что уже написано до нас) Как вы верно отметили, я то пытался "магию" показать, это конечно не есть рекомендуемый подход. НО всегда думайте (это главная проблема наследования) не получите ли вы чего лишнего, чего быть в кошельке не должно? Вместе с особняком иногда в наследство идет деревянный сортир в углу)))

  • @ХуанМатус-х8ю
    @ХуанМатус-х8ю Рік тому +1

    Для сравнения достаточно реализовать >=,

  • @bmirmorsminecraft3106
    @bmirmorsminecraft3106 7 місяців тому

    про итератор.
    ты же в __iter__ мог просто внрнуть iter(self.container) поскольку контейнер у тебя является списком, а в нем уже реализованы итерации, некст и итер.
    можно было не заморачиватся.

    • @PythonRussian
      @PythonRussian  7 місяців тому +1

      так если не заморачиваться, то можно и не снимать ничего