__new__ или __init__ в Python? Знаете ли вы это..

Поделиться
HTML-код
  • Опубликовано: 19 июн 2024
  • ⭐ Курс ООП и Приват канал: www.zproger-school.com/?...
    ⭐ Телеграм канал: t.me/+8gDMHrWdYWxmM2Ex
    В данном видео рассмотрим отличия магических методов _new_ и _init_ в Python. Данные методы также называют dunder методами, потому что они позволяют переопределять поведение классов и реализовывать их нужным вам образом.
    Многие разработчики не знают зачем вообще применяется метод __new__, поэтому данное видео отвечает на все эти вопросы как в плане теории, так и в плане практики.
    📁 Github: github.com/Zproger
    📁 Все плейлисты с уроками: bit.ly/39GaY89
    📁 Связаться со мной: zproger777@gmail.com
    📁 Поддержать криптовалютой: github.com/Zproger/donate
    Тайм-коды:
    0:00 - Особенности init и принцип работы
    1:28 - Что такое магические (dunder) методы в Python?
    1:50 - Способ создания экземпляра в обход init метода
    2:24 - Важная новость. Обновление курса ООП + Приват канал
    4:57 - Паттерн Singleton, магический метод call + Метаклассы
    7:26 - Что будет с экземплярами, если они с разными id?
    7:41 - Паттерн Одиночка. Dunder метод new + Наследование
    8:02 - Что такое cls в методе new?
    8:38 - Что запускается раньше, new или init?
    9:24 - Что находится в cls и self?
    9:52 - Что будет если вернуть None из new?
    10:05 - Самый понятный пример с использованием new
    11:22 - Метод New + Класс который наследует кортеж

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

  • @evalinor
    @evalinor Год назад +47

    Классная история "не могу рассказать фишки, потому, что ютуб забанит", улыбнуло)

    • @zproger
      @zproger  Год назад +5

      Можете погуглить например инструмент LIEF, который есть в приват канале.
      По правилам ютуба обзор на такое не сделать, также как и на инструменты для анализа
      и обратной разработки.

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

      некоторые ОСИНТы и прочие граничащие с вредоносными ботами/взломами или даже не слишком очевидным пентестом - блокируются ютубом.

  • @non5309
    @non5309 Год назад +39

    Курсов ООП как грязи уже. На том же степике уже есть два курса. Еще один готовится к выпуску. Базовых и продвинутых курсов по питону дочерта уже. А вот чего не хватает так это проф. курсов. Типа ассинхронка, работа с потоками/процессами, работа с БД. Я бы купил хороший проработанный курс по этим темам. Но, увы, их нет. Есть конечно всякие тяжеловесы типа яндекс.практикум или по подиске скиллбокса, но это немного не тот формат.

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

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

  • @user-vl1el8bp7y
    @user-vl1el8bp7y Год назад +7

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

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

      Благодарю, рад что понравилось

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

    Спасибо за видео! До этого знал конечно про дандер методы эти и также то что new вызывается раньше init и возвращает именно экземпляр класса, но не задумывался об тонкостях работы с этими методами, а также об super(). После видео стало понятно когда и как это можно использовать.

  • @IvanIvanov-dh3sg
    @IvanIvanov-dh3sg Год назад +4

    Очень интересно и познавательно)))

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

      Благодарю

  • @user-wm4kp8hs8g
    @user-wm4kp8hs8g Год назад +2

    Спасибо, видео оказалось реально полезным!

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

      Благодарю, значит не зря старался :)

  • @user-yk9nr5bu9q
    @user-yk9nr5bu9q 7 месяцев назад

    Я не знал отличия, удобно. Классный пример с кортежем.

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

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

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

    Доброго времени суток, замечал что автор часто отвечает на комемнты, у тебя отличный контент, очень много фишек узнал только благодаря тебе.
    Возможно дашь совет или подскажите книгу или курс по ООП, который помог в изучении данной темы, желательно бесплатный, не то что бы мне денег жалко.. живу просто в городе где нет банковской системы в связи с последними событиями..

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

    Как жалко ,что на таком понятном и крутом видео так мало лайков. А ведь кому-то реально было полезно ,но он не поставил лайк . Честно не понимаю почему люди всеравно не поддерживают автора.

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

    Хорошее видео, я подумаю над твоим предложением )

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

      Рад что понравилось =)

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

    супер!

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

      Благодарю

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

    Автор, подскажи плз как именно называется твой курс на степике?

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

      В разделе "о канале" есть ссылка на степик, но самый актуальный курс по 1й ссылке в описании под этим видео, именно там будут все обновления и т.д

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

    фишки пайтона/технология которую запретил ютуб, никогда о таком никто не говорил. реально внезапный поворот...

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

    Полезно

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

    Привет, Погер, есть реально важный вопрос
    Что такое __long__ метод? Он существует и, как написано, должен приводить число к типу long, хотя такого типа нет. Как факт, его pycharm подсвечивает как переменную, а числа можно использовать с буквой L и l как unsigned и signed (так написано): 56L, 4l. Снимешь об этом видео или упомянешь, пожалуйста ;)

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

      Это дундер-метод: ___long___

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

      Он уже не поддерживается в Python3, так как всё происходит автоматически,
      это в Python2 надо было играться руками)

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

      А, хорошо, спасибо)

  • @blackcatdevel0per
    @blackcatdevel0per 8 месяцев назад

    Сделай ещё видос по метаклассам и работы с ними, динамическую генерацию классов, и динамическую генерацию классов с метаклассами)))

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

    интересно бывает посмотреть такие видео про небольшие приколы в питоне. единственное, tuple comprehension не существует, там было generator expression в конструкторе кортежа :)

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

    Ребята, не реклама. Я учу питон чуть больше полугода (7.5 месяца) уже работаю по профилю.
    Так вот, в свое время я нашел курс данного человека (конечно, слитый, но все же) (да я его тоже покупал, просто у инфоцыган как это водится).
    Хочу дать отдельную благодарность человеку с этого канала за такой курс (к слову, то его старый, если он его зарефакторил, то я даже представить не могу насколько он стал крутым). Ни у одного человека я не видел курса ООП лучше. Причем, подход в 3-7 минут идеален, т.к ты точно знаешь что в видосе и тебе не нужно мотать 20-30-40 минутные видосы, где в т.ч очень много воды. У канала незаслуженно мало подписчиков, хотя рассказывает человек очень хорошо ( особенно на фоне его старых видосов) и показывает то, чего не показывает практически никто (я за тонкости, например те же прокси, когда в свое время мне нужно было для модуля реквестов в начале своего пути).
    Да, много "повторений", но и у него публика не шибко большая, плюс он всегда что-то дополняет, даже если повторяет.
    Так что если действительно ищете хороший курс - он не врет, он у него действительно отличный.
    Всем бобра, а автору жирный лайк.

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

      Благодарю за комментарий, буду стараться и дальше улучшать уровень контента

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

    Класс

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

      Спасибо =)

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

    очень крутое видео

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

      Благодарю!

  • @dima.kasper
    @dima.kasper 9 месяцев назад

    Ваша программа становится настолько глубокой, что мало кто сможет в ней разобраться. Даже вы через 2 недели😂😂
    А если серьезно, то метапрограммирование это очень мощно и действительно позволяет крутить мутить как угодно.
    А еще цитата Лучано Ромальо, автора Fluent Python:
    “Метаклассы не нужны 90% разработчиков. А остальным 10% они не нужны в 90% случаев.“

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

    лукасик от СЕООНЛИ

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

    ці речі мали би вивчатися на початку вивчення пітона. І все-все було б набагато зрозуміліше. Це сі-подібні штуки, близькі до залізяччя. Коли __new__ бере шмат пам'яті з кучі, структурує, створює простір імен. Привласнює результат змінній. А потім __init__ в цю заготовку напихує зміст - прикладні атрибути.
    А, і головне. Якщо розібратися, що таке клас, то клас якби і є сінглтон. Робити потім інстанс - це двічі зберігати одне й те ж в пам'яті.

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

      Вот если без инита реализовать атрибуты, то он будет реально вести себя как синглтон и возвращать старые адреса, чтобы экономить память. Но при использовании init поведение меняется. В остальном же согласен на 100%

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

    Добрый день,вопрос по языку питон,как разшифровать pyarmor,есть ли какой-то способ?

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

      Способ есть, но я еще его не проверял) Возможно дойдут руки и залью его в приват канал

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

      @@zproger а сколько стоит доступ в приват канал ?

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

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

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

      Ок

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

      @@zproger проверил ?

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

    Как использовать numba с ООП?

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

    На 3:08 есть упоминание о фишках, которые запрещены RUclips - ом...
    Что это может быть?

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

      Технологии по обходу различных защит например)

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

    А есть ли в питоне модификаторы доступа?

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

      Да, в Python можно делать приватные и защищенные атрибуты.
      Это не назвать прям полноценными модификаторами доступа,
      но они позволяют сделать похожий функционал.

  • @user-gf6er4ug6g
    @user-gf6er4ug6g Год назад +1

    0:20 Я вообще не топовый и даже можно сказать не разработчик. Однако довольно быстро въехал что
    __new__ первым аргументом ссылается на класс, а __init__ на экземпляр класса

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

      Это хорошо

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

    Вы можете узнать о методе new только когда станете топовым разработчиком. Это был буквально 3 вопрос на собеседе на позицию джуна, реализовать сингтон с помощью new. В каком году живет автор, если думает что new это что-то такое, чего могут не знать даже еще не джуны)

  • @user-bd4dw7rz2d
    @user-bd4dw7rz2d Год назад +2

    Половина видео реклама своих курсов. Как я этого ждал, ауено. Больше рекламы, больше...

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

      Рекламу можно пропустить если что одним нажатием ЛКМ =)

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

    Чувак, ты конечно молодец, и твои видео реально классные, но не маловато у тебя опыта в разработке чтобы продавать курсы? 4-5 лет это уровень Мидла, а это мало чтобы вести свои курсы, таких берут в geekbraince и тд а там увы обучение не ахти

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

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

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

    А зачем нужна папка pycache?

  • @user-yg6rf7om7x
    @user-yg6rf7om7x Год назад +1

    Интересный и не понятный пример)
    Автор говорит, что в методе __init__ нельзя переписать множество поэлементно потому что оно не изменяемо, в то время как в методе __new__ возможно, хотя не смотря на все там происходит создание нового множества, что по сути и будет происходить в __init__ если не притягивать пример непонятно куда за уши и написать в лоб self=[for i in list_in].
    Если мое понимание является не верным, с радостью приму КОНСТРУКТИВНУЮ критику.

    • @user-yg6rf7om7x
      @user-yg6rf7om7x Год назад

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

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

      Без проблем можно создать такую переменную и в init, просто это самый наглядный способ показать как new работает, да и сами значения записывались напрямую в self, что без new и наследования не сделать

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

    Сухая сжатая информация плохо усваивается. Нужны примеры. И моя проблема, что когда я смотрю на класс, я спрашиваю себя как это можно переделать на функции, то есть я пока не нашёл ни одного примера, когда без класса не обойтись. Поэтому в классах я плох. Но очень хочу подрасти в этом вопросе. Но мне нужны весомые примеры с демонстрацией мощи классов, где бы показывалась ущербность функционального подхода. Чаще программы на функциях выглядят короче, чем на классах, поэтому я использую функционалку. Мне нужен такой пример, когда программа на классе стала бы короче, чем такое же на функциях.

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

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

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

      В простых программах классы реально не нужны. До недавнего времени тоже считал, что ооп это бесполезно. Но когда начинаешь писать что-то большое, ооп это очень удобно

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

      Windows API - прекрасный пример того, как "удобно" на функциях делать, например, интерфейс. Когда любой элемент управления - это не класс, а 100500 функций и 100500 типов данных.

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

      При программировании игр классы имеют серьёзные прюсы, во всём остальном можно действительно обойтись функциями, без заморочек с классами.
      Классы и были разработаны для GameDev, так как прогммирование одними функциями приводит неизбежно к тупику.

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

    Бро а со скидкой сколько? я заинтересован

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

      Приветствую, можете связаться в чате на сайте, либо оставить заявку,
      обсудим более подробно =)

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

      @@zproger тоже интересует это вопрос. 😉

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

    Я new понял сразу а вот инит сидел и не мог понять долго

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

      Обычно бывает наоборот)

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

      Я к init и self отношусь, как необходимому злу, которое нужно прописать, чтобы класс начал свою жизнь. Но мне кажется, что разрабам языка можно было это убрать, и сделать опциональным, то есть если программисту нужно указать new, он указывает, а по умолчанию init уже стоит. Если смотреть саму историю появления классов, то мы видим, что это стало возможным ради того, чтобы язык стал учебным. Без классов его не могли преподавать в университетах. Учебный язык означает, что в нём есть всё для получения грамотности программирования. Чтобы студент мог с лёгкостью перепрыгнуть в другой язык. Для этого в языке должно существовать всё, что есть в других языках, в плане парадигмы. Объявление классов, открытие файлов, match - должно быть похожим как в других языках. Учебный истребитель похож с боевым только в плане управления, рычажки такие же как на боевом. Когда язык стали преподавать в западных университетах, он быстро достиг первых строг рейтинга.

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

    Разве cls не ссылка на сам класса, а self - на экземпляр?

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

      В видео разве не так сказал?

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

      @@zproger Прошу прощенья, если ошибся. Сейчас пересмотрю!

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

    Фишки запрещены RUclips 😂

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

      Я не шутил, многие инструменты ютуб не одобрит и просто заблокирует видео

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

    __new__ в питоне как инициализация в плюсах, только гибче

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

      =)

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

      Ну, не совсем так... Оператор _new_ в плюсах вызывает конструктор класса, т.е. инициализацию экземляра в памяти, так же, как и __init__ в Питоне. Но __new__ в Питоне помогает вмешаться в процесс выделения памяти и создания экземпляра, а в плюсах - этим занимается отдельная встроенная функция перед вызовом конструктора класса, malloc(...) обычно, которая вставляетсяя в код и обычно вызывается автоматически... Т.е. в Питоне это просто выложили на поверхность, да, для большей гибкости...

  • @gryphon175.yakusha9
    @gryphon175.yakusha9 Год назад

    видемо я еще не дорос чтоб понимать происходящее

  • @gilman2056
    @gilman2056 Год назад +7

    запрещены ютубом😅🤣😂.

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

      Я серьёзно)

  • @user-md8uk2ll3n
    @user-md8uk2ll3n Год назад +1

    tuple - т'юпл

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

      =)

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

      "тапл", вообще-то... "Закрытый слог", в Инглише... "ю" произносится, как "а"...😉

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

    +

  • @user-pg8ry1tm3t
    @user-pg8ry1tm3t 5 месяцев назад

    New не стоит использовать никогда🥴 имхо… даже в плюсах это близко к депрекейт. Нефих вручную управлять памятью, раии никто не отменял. И контекст менеджер также лучше работает с ресурсами…

  • @Mr.IgNatUsiK
    @Mr.IgNatUsiK Год назад

    Здравствуйте

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

      Здравствуйте =)

  • @user-sk4jp3ul4q
    @user-sk4jp3ul4q Год назад +1

    так то видео прикольные, но по две минуты в видео рекламы из 12 минут видео , это жуть

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

      Ну а что поделать, если не интересно, можете пропустить

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

    ___new___ чаще используется в мета классах

  • @user-rl9dq1hc8b
    @user-rl9dq1hc8b Год назад

    Что же это за технологии, о которых не стоит на ютубе говорить?

  • @user-vm3gs2jh4o
    @user-vm3gs2jh4o Год назад +1

    Я вообще нечего не понял.тоны,зкземпляры.А по русски можно.

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

      Ну это видео скорее для тех, кто уже смешарик

    • @user-vm3gs2jh4o
      @user-vm3gs2jh4o Год назад

      @@zproger А где начало всех начал.Что и как с чего начать,Если этот урок продолжения чем и евляется,естейственно не понятно о чом рерь.

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

      Это базисы теории ООП. Ну, не всё - базисы, но то, что ООП-разработчик просто обязан знать и понимать! Упрощённо говоря,
      1. "Класс" - это "шаблон" ("пресс на станке для штамповки пробок для бутылок"). "Экземпляр класса" - это объект в памяти, (т.е. сама готовая "пробка").
      2. "Синглтон" - это один из шаблонов разработки в ООП, который описывает, как создать один единственный экземпляр класса во всей программе, независимо от того, сколько раз будут попытки его создать (причём, во всех языках ООП). Иногда это очень полезно... См. : Паттерны проектирования, Design Patterns ("Банда Четырёх").

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

      ​@@user-vm3gs2jh4o ты сначала русский выучи

  • @Himera1983
    @Himera1983 Месяц назад

    я так и не понял магические методы. Почему и как они существуют но мы их не видим и почему мы их пишем еще. Например init . Как можно сразу понять? Я даже сформулировать не могу как и что я непонимаю .

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

    Z в начале названия вашего канала надеюсь не имеет ничего общего с нынешней ситуацией между Россией и Украиной

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

      Конечно нет) нику 3 года уже

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

      @@zproger Тогда я спокоен, очень круто объясняете,мне как новичку, больше чем понятно. Продолжайте развивать контент в том же духе.

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

      @@zproger Успокоили. А то жалко было бы, контент у вас хороший. Кстати, многие поменяли подобные ники, так как букву Z сильно зашкварили, как некогда свастику.