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

  Рет қаралды 33,823

ZProger [ IT ]

ZProger [ IT ]

Күн бұрын

⭐ Курс ООП и Приват канал: 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 + Класс который наследует кортеж

Пікірлер: 118
@evalinor
@evalinor Жыл бұрын
Классная история "не могу рассказать фишки, потому, что ютуб забанит", улыбнуло)
@zproger
@zproger Жыл бұрын
Можете погуглить например инструмент LIEF, который есть в приват канале. По правилам ютуба обзор на такое не сделать, также как и на инструменты для анализа и обратной разработки.
@brothersstudio3566
@brothersstudio3566 Жыл бұрын
некоторые ОСИНТы и прочие граничащие с вредоносными ботами/взломами или даже не слишком очевидным пентестом - блокируются ютубом.
@non5309
@non5309 Жыл бұрын
Курсов ООП как грязи уже. На том же степике уже есть два курса. Еще один готовится к выпуску. Базовых и продвинутых курсов по питону дочерта уже. А вот чего не хватает так это проф. курсов. Типа ассинхронка, работа с потоками/процессами, работа с БД. Я бы купил хороший проработанный курс по этим темам. Но, увы, их нет. Есть конечно всякие тяжеловесы типа яндекс.практикум или по подиске скиллбокса, но это немного не тот формат.
@zproger
@zproger Жыл бұрын
Спасибо за идею по асинхронности. Этот курс есть в планах, но сейчас основная задача это добавить много материалов как и в приват, так и в курс ооп, на счет того что курсов много это да, но это не совсем тот материал, который я хочу реализовать в след.обновлениях.
@user-vl1el8bp7y
@user-vl1el8bp7y Жыл бұрын
Спасибо! Все видео норм, с большим углублением в темы чем на других каналах.
@zproger
@zproger Жыл бұрын
Благодарю, рад что понравилось
@memoryundone
@memoryundone Жыл бұрын
Спасибо за видео! До этого знал конечно про дандер методы эти и также то что new вызывается раньше init и возвращает именно экземпляр класса, но не задумывался об тонкостях работы с этими методами, а также об super(). После видео стало понятно когда и как это можно использовать.
@IvanIvanov-dh3sg
@IvanIvanov-dh3sg Жыл бұрын
Очень интересно и познавательно)))
@zproger
@zproger Жыл бұрын
Благодарю
@user-wm4kp8hs8g
@user-wm4kp8hs8g Жыл бұрын
Спасибо, видео оказалось реально полезным!
@zproger
@zproger Жыл бұрын
Благодарю, значит не зря старался :)
@user-yk9nr5bu9q
@user-yk9nr5bu9q 7 ай бұрын
Я не знал отличия, удобно. Классный пример с кортежем.
@gilman2056
@gilman2056 Жыл бұрын
Забавно, 3 недели прошло с последнего просмотра видео, тогда было мне бесполезно, но сегодня решил досмотреть и понял, что для меня как-раз сейчас актуально, так-как нужно подключение к базе реализовать в разных местах, а подбрасывать объект через атрибуты надо далеко в глубь, хорошо, что не забыл упомянуть как пример где этот шаблон используется
@chicago_typewriter
@chicago_typewriter Жыл бұрын
Автор, подскажи плз как именно называется твой курс на степике?
@zproger
@zproger Жыл бұрын
В разделе "о канале" есть ссылка на степик, но самый актуальный курс по 1й ссылке в описании под этим видео, именно там будут все обновления и т.д
@MAKSIM24251
@MAKSIM24251 Жыл бұрын
супер!
@zproger
@zproger Жыл бұрын
Благодарю
@diz996
@diz996 Жыл бұрын
Хорошее видео, я подумаю над твоим предложением )
@zproger
@zproger Жыл бұрын
Рад что понравилось =)
@Biolog3000
@Biolog3000 Жыл бұрын
Как жалко ,что на таком понятном и крутом видео так мало лайков. А ведь кому-то реально было полезно ,но он не поставил лайк . Честно не понимаю почему люди всеравно не поддерживают автора.
@drimmwald4483
@drimmwald4483 Жыл бұрын
Доброго времени суток, замечал что автор часто отвечает на комемнты, у тебя отличный контент, очень много фишек узнал только благодаря тебе. Возможно дашь совет или подскажите книгу или курс по ООП, который помог в изучении данной темы, желательно бесплатный, не то что бы мне денег жалко.. живу просто в городе где нет банковской системы в связи с последними событиями..
@omka4580
@omka4580 Жыл бұрын
Полезно
@gmd3232
@gmd3232 Жыл бұрын
Как использовать numba с ООП?
@blackcatdevel0per
@blackcatdevel0per 9 ай бұрын
Сделай ещё видос по метаклассам и работы с ними, динамическую генерацию классов, и динамическую генерацию классов с метаклассами)))
@Igor_UA
@Igor_UA Жыл бұрын
Класс
@zproger
@zproger Жыл бұрын
Спасибо =)
@andriivozniuk4834
@andriivozniuk4834 Жыл бұрын
фишки пайтона/технология которую запретил ютуб, никогда о таком никто не говорил. реально внезапный поворот...
@dmitriyneledva4693
@dmitriyneledva4693 Жыл бұрын
очень крутое видео
@zproger
@zproger Жыл бұрын
Благодарю!
@robertobokarev439
@robertobokarev439 Жыл бұрын
Привет, Погер, есть реально важный вопрос Что такое __long__ метод? Он существует и, как написано, должен приводить число к типу long, хотя такого типа нет. Как факт, его pycharm подсвечивает как переменную, а числа можно использовать с буквой L и l как unsigned и signed (так написано): 56L, 4l. Снимешь об этом видео или упомянешь, пожалуйста ;)
@robertobokarev439
@robertobokarev439 Жыл бұрын
Это дундер-метод: ___long___
@zproger
@zproger Жыл бұрын
Он уже не поддерживается в Python3, так как всё происходит автоматически, это в Python2 надо было играться руками)
@robertobokarev439
@robertobokarev439 Жыл бұрын
А, хорошо, спасибо)
@auril1594
@auril1594 Жыл бұрын
интересно бывает посмотреть такие видео про небольшие приколы в питоне. единственное, tuple comprehension не существует, там было generator expression в конструкторе кортежа :)
@zproger
@zproger Жыл бұрын
=))
@brothersstudio3566
@brothersstudio3566 Жыл бұрын
Ребята, не реклама. Я учу питон чуть больше полугода (7.5 месяца) уже работаю по профилю. Так вот, в свое время я нашел курс данного человека (конечно, слитый, но все же) (да я его тоже покупал, просто у инфоцыган как это водится). Хочу дать отдельную благодарность человеку с этого канала за такой курс (к слову, то его старый, если он его зарефакторил, то я даже представить не могу насколько он стал крутым). Ни у одного человека я не видел курса ООП лучше. Причем, подход в 3-7 минут идеален, т.к ты точно знаешь что в видосе и тебе не нужно мотать 20-30-40 минутные видосы, где в т.ч очень много воды. У канала незаслуженно мало подписчиков, хотя рассказывает человек очень хорошо ( особенно на фоне его старых видосов) и показывает то, чего не показывает практически никто (я за тонкости, например те же прокси, когда в свое время мне нужно было для модуля реквестов в начале своего пути). Да, много "повторений", но и у него публика не шибко большая, плюс он всегда что-то дополняет, даже если повторяет. Так что если действительно ищете хороший курс - он не врет, он у него действительно отличный. Всем бобра, а автору жирный лайк.
@zproger
@zproger Жыл бұрын
Благодарю за комментарий, буду стараться и дальше улучшать уровень контента
@gmd3232
@gmd3232 Жыл бұрын
А зачем нужна папка pycache?
@gmd3232
@gmd3232 Жыл бұрын
А есть ли в питоне модификаторы доступа?
@zproger
@zproger Жыл бұрын
Да, в Python можно делать приватные и защищенные атрибуты. Это не назвать прям полноценными модификаторами доступа, но они позволяют сделать похожий функционал.
@seoonlyRU
@seoonlyRU Жыл бұрын
лукасик от СЕООНЛИ
@usakabi3843
@usakabi3843 Жыл бұрын
Добрый день,вопрос по языку питон,как разшифровать pyarmor,есть ли какой-то способ?
@zproger
@zproger Жыл бұрын
Способ есть, но я еще его не проверял) Возможно дойдут руки и залью его в приват канал
@usakabi3843
@usakabi3843 Жыл бұрын
@@zproger а сколько стоит доступ в приват канал ?
@zproger
@zproger Жыл бұрын
Он идет вместе с курсом ооп, более подробная информация по первой ссылке в описании. Можете также задать вопрос в чате на сайте.
@zproger
@zproger Жыл бұрын
Ок
@usakabi3843
@usakabi3843 Жыл бұрын
@@zproger проверил ?
@Igor_UA
@Igor_UA Жыл бұрын
На 3:08 есть упоминание о фишках, которые запрещены KZfaq - ом... Что это может быть?
@zproger
@zproger Жыл бұрын
Технологии по обходу различных защит например)
@alexartiushkin2865
@alexartiushkin2865 Жыл бұрын
ці речі мали би вивчатися на початку вивчення пітона. І все-все було б набагато зрозуміліше. Це сі-подібні штуки, близькі до залізяччя. Коли __new__ бере шмат пам'яті з кучі, структурує, створює простір імен. Привласнює результат змінній. А потім __init__ в цю заготовку напихує зміст - прикладні атрибути. А, і головне. Якщо розібратися, що таке клас, то клас якби і є сінглтон. Робити потім інстанс - це двічі зберігати одне й те ж в пам'яті.
@zproger
@zproger Жыл бұрын
Вот если без инита реализовать атрибуты, то он будет реально вести себя как синглтон и возвращать старые адреса, чтобы экономить память. Но при использовании init поведение меняется. В остальном же согласен на 100%
@dima.kasper
@dima.kasper 10 ай бұрын
Ваша программа становится настолько глубокой, что мало кто сможет в ней разобраться. Даже вы через 2 недели😂😂 А если серьезно, то метапрограммирование это очень мощно и действительно позволяет крутить мутить как угодно. А еще цитата Лучано Ромальо, автора Fluent Python: “Метаклассы не нужны 90% разработчиков. А остальным 10% они не нужны в 90% случаев.“
@voruto1068
@voruto1068 12 сағат бұрын
Я думал это объяснение инита🙃
@user-bd4dw7rz2d
@user-bd4dw7rz2d Жыл бұрын
Половина видео реклама своих курсов. Как я этого ждал, ауено. Больше рекламы, больше...
@zproger
@zproger Жыл бұрын
Рекламу можно пропустить если что одним нажатием ЛКМ =)
@beloussemen2778
@beloussemen2778 Жыл бұрын
Бро а со скидкой сколько? я заинтересован
@zproger
@zproger Жыл бұрын
Приветствую, можете связаться в чате на сайте, либо оставить заявку, обсудим более подробно =)
@vova1568
@vova1568 Жыл бұрын
@@zproger тоже интересует это вопрос. 😉
@user-gf6er4ug6g
@user-gf6er4ug6g Жыл бұрын
0:20 Я вообще не топовый и даже можно сказать не разработчик. Однако довольно быстро въехал что __new__ первым аргументом ссылается на класс, а __init__ на экземпляр класса
@zproger
@zproger Жыл бұрын
Это хорошо
@katsuyorii
@katsuyorii 10 ай бұрын
Вы можете узнать о методе new только когда станете топовым разработчиком. Это был буквально 3 вопрос на собеседе на позицию джуна, реализовать сингтон с помощью new. В каком году живет автор, если думает что new это что-то такое, чего могут не знать даже еще не джуны)
@gryphon175.yakusha9
@gryphon175.yakusha9 Жыл бұрын
видемо я еще не дорос чтоб понимать происходящее
@jonnash1683
@jonnash1683 Жыл бұрын
Разве cls не ссылка на сам класса, а self - на экземпляр?
@zproger
@zproger Жыл бұрын
В видео разве не так сказал?
@jonnash1683
@jonnash1683 Жыл бұрын
@@zproger Прошу прощенья, если ошибся. Сейчас пересмотрю!
@rokot
@rokot Жыл бұрын
Сухая сжатая информация плохо усваивается. Нужны примеры. И моя проблема, что когда я смотрю на класс, я спрашиваю себя как это можно переделать на функции, то есть я пока не нашёл ни одного примера, когда без класса не обойтись. Поэтому в классах я плох. Но очень хочу подрасти в этом вопросе. Но мне нужны весомые примеры с демонстрацией мощи классов, где бы показывалась ущербность функционального подхода. Чаще программы на функциях выглядят короче, чем на классах, поэтому я использую функционалку. Мне нужен такой пример, когда программа на классе стала бы короче, чем такое же на функциях.
@zproger
@zproger Жыл бұрын
В ближайшем видео покажу почему классы это огонь)
@tolia5587
@tolia5587 Жыл бұрын
В простых программах классы реально не нужны. До недавнего времени тоже считал, что ооп это бесполезно. Но когда начинаешь писать что-то большое, ооп это очень удобно
@edgarfedosov1440
@edgarfedosov1440 Жыл бұрын
Windows API - прекрасный пример того, как "удобно" на функциях делать, например, интерфейс. Когда любой элемент управления - это не класс, а 100500 функций и 100500 типов данных.
@alexandermartin5694
@alexandermartin5694 Жыл бұрын
При программировании игр классы имеют серьёзные прюсы, во всём остальном можно действительно обойтись функциями, без заморочек с классами. Классы и были разработаны для GameDev, так как прогммирование одними функциями приводит неизбежно к тупику.
@cody__9115
@cody__9115 Жыл бұрын
Чувак, ты конечно молодец, и твои видео реально классные, но не маловато у тебя опыта в разработке чтобы продавать курсы? 4-5 лет это уровень Мидла, а это мало чтобы вести свои курсы, таких берут в geekbraince и тд а там увы обучение не ахти
@zproger
@zproger Жыл бұрын
Спасибо за комментарий. Этого опыта более чем достаточно чтобы сделать такой курс по ооп, который не сделает никто, я по крайней мере не видел еще ни одного полного курса по ооп, который бы раскрывал столько тем, которые раскрывает мой курс. Да и к тому же, чтобы рассказать об ооп не надо 20 лет опыта иметь.
@mrslashx
@mrslashx Жыл бұрын
Я new понял сразу а вот инит сидел и не мог понять долго
@zproger
@zproger Жыл бұрын
Обычно бывает наоборот)
@rokot
@rokot Жыл бұрын
Я к init и self отношусь, как необходимому злу, которое нужно прописать, чтобы класс начал свою жизнь. Но мне кажется, что разрабам языка можно было это убрать, и сделать опциональным, то есть если программисту нужно указать new, он указывает, а по умолчанию init уже стоит. Если смотреть саму историю появления классов, то мы видим, что это стало возможным ради того, чтобы язык стал учебным. Без классов его не могли преподавать в университетах. Учебный язык означает, что в нём есть всё для получения грамотности программирования. Чтобы студент мог с лёгкостью перепрыгнуть в другой язык. Для этого в языке должно существовать всё, что есть в других языках, в плане парадигмы. Объявление классов, открытие файлов, match - должно быть похожим как в других языках. Учебный истребитель похож с боевым только в плане управления, рычажки такие же как на боевом. Когда язык стали преподавать в западных университетах, он быстро достиг первых строг рейтинга.
@plumber_from_forbs
@plumber_from_forbs Жыл бұрын
Фишки запрещены KZfaq 😂
@zproger
@zproger Жыл бұрын
Я не шутил, многие инструменты ютуб не одобрит и просто заблокирует видео
@user-yg6rf7om7x
@user-yg6rf7om7x Жыл бұрын
Интересный и не понятный пример) Автор говорит, что в методе __init__ нельзя переписать множество поэлементно потому что оно не изменяемо, в то время как в методе __new__ возможно, хотя не смотря на все там происходит создание нового множества, что по сути и будет происходить в __init__ если не притягивать пример непонятно куда за уши и написать в лоб self=[for i in list_in]. Если мое понимание является не верным, с радостью приму КОНСТРУКТИВНУЮ критику.
@user-yg6rf7om7x
@user-yg6rf7om7x Жыл бұрын
Если не ошибаюсь то идеологию иммутабельности никак не обойти, под копотом яблоко то оно и будет яблоком как бы вы его не красили в оранжевый. Умные дядьки не просто так сделали подобные вещи и зачастую если хочешь менять множество часто то тебе нужно не множество) Если хочешь редко то без велосипедов перезапиши) Если хочешь усложнить свой код, то вот тебе волшебные методы, развлекайся) Круто конечно что дается доступ к такому разнообразию предопределенных методов, но ребят основная проблема питона в возможности писать код как хочешь, но именно поэтому не стоит его перегружать там где не надо)
@zproger
@zproger Жыл бұрын
Без проблем можно создать такую переменную и в init, просто это самый наглядный способ показать как new работает, да и сами значения записывались напрямую в self, что без new и наследования не сделать
@ivanosinin5050
@ivanosinin5050 Жыл бұрын
__new__ в питоне как инициализация в плюсах, только гибче
@zproger
@zproger Жыл бұрын
=)
@maksimluzin1121
@maksimluzin1121 Жыл бұрын
Ну, не совсем так... Оператор _new_ в плюсах вызывает конструктор класса, т.е. инициализацию экземляра в памяти, так же, как и __init__ в Питоне. Но __new__ в Питоне помогает вмешаться в процесс выделения памяти и создания экземпляра, а в плюсах - этим занимается отдельная встроенная функция перед вызовом конструктора класса, malloc(...) обычно, которая вставляетсяя в код и обычно вызывается автоматически... Т.е. в Питоне это просто выложили на поверхность, да, для большей гибкости...
@DevALine
@DevALine Жыл бұрын
+
@zproger
@zproger Жыл бұрын
=)))
@DevALine
@DevALine Жыл бұрын
@@zproger ;)
@IgNatUsiK.official
@IgNatUsiK.official Жыл бұрын
Здравствуйте
@zproger
@zproger Жыл бұрын
Здравствуйте =)
@gilman2056
@gilman2056 Жыл бұрын
запрещены ютубом😅🤣😂.
@zproger
@zproger Жыл бұрын
Я серьёзно)
@user-pg8ry1tm3t
@user-pg8ry1tm3t 5 ай бұрын
New не стоит использовать никогда🥴 имхо… даже в плюсах это близко к депрекейт. Нефих вручную управлять памятью, раии никто не отменял. И контекст менеджер также лучше работает с ресурсами…
@user-md8uk2ll3n
@user-md8uk2ll3n Жыл бұрын
tuple - т'юпл
@zproger
@zproger Жыл бұрын
=)
@maksimluzin1121
@maksimluzin1121 Жыл бұрын
"тапл", вообще-то... "Закрытый слог", в Инглише... "ю" произносится, как "а"...😉
@user-sk4jp3ul4q
@user-sk4jp3ul4q Жыл бұрын
так то видео прикольные, но по две минуты в видео рекламы из 12 минут видео , это жуть
@zproger
@zproger Жыл бұрын
Ну а что поделать, если не интересно, можете пропустить
@user-rl9dq1hc8b
@user-rl9dq1hc8b Жыл бұрын
Что же это за технологии, о которых не стоит на ютубе говорить?
@luwqz1
@luwqz1 Жыл бұрын
___new___ чаще используется в мета классах
@zproger
@zproger Жыл бұрын
😉
@user-vm3gs2jh4o
@user-vm3gs2jh4o Жыл бұрын
Я вообще нечего не понял.тоны,зкземпляры.А по русски можно.
@zproger
@zproger Жыл бұрын
Ну это видео скорее для тех, кто уже смешарик
@user-vm3gs2jh4o
@user-vm3gs2jh4o Жыл бұрын
@@zproger А где начало всех начал.Что и как с чего начать,Если этот урок продолжения чем и евляется,естейственно не понятно о чом рерь.
@maksimluzin1121
@maksimluzin1121 Жыл бұрын
Это базисы теории ООП. Ну, не всё - базисы, но то, что ООП-разработчик просто обязан знать и понимать! Упрощённо говоря, 1. "Класс" - это "шаблон" ("пресс на станке для штамповки пробок для бутылок"). "Экземпляр класса" - это объект в памяти, (т.е. сама готовая "пробка"). 2. "Синглтон" - это один из шаблонов разработки в ООП, который описывает, как создать один единственный экземпляр класса во всей программе, независимо от того, сколько раз будут попытки его создать (причём, во всех языках ООП). Иногда это очень полезно... См. : Паттерны проектирования, Design Patterns ("Банда Четырёх").
@serobrine
@serobrine Жыл бұрын
​@@user-vm3gs2jh4o ты сначала русский выучи
@Himera1983
@Himera1983 2 ай бұрын
я так и не понял магические методы. Почему и как они существуют но мы их не видим и почему мы их пишем еще. Например init . Как можно сразу понять? Я даже сформулировать не могу как и что я непонимаю .
@rsmz20
@rsmz20 Жыл бұрын
Z в начале названия вашего канала надеюсь не имеет ничего общего с нынешней ситуацией между Россией и Украиной
@zproger
@zproger Жыл бұрын
Конечно нет) нику 3 года уже
@rsmz20
@rsmz20 Жыл бұрын
@@zproger Тогда я спокоен, очень круто объясняете,мне как новичку, больше чем понятно. Продолжайте развивать контент в том же духе.
@LiftBuff
@LiftBuff Жыл бұрын
@@zproger Успокоили. А то жалко было бы, контент у вас хороший. Кстати, многие поменяли подобные ники, так как букву Z сильно зашкварили, как некогда свастику.
Как избавиться от циклов импорта в Python
13:09
ТОП 5 Ошибок в написании функций Python
12:46
Always be more smart #shorts
00:32
Jin and Hattie
Рет қаралды 44 МЛН
He sees meat everywhere 😄🥩
00:11
AngLova
Рет қаралды 10 МЛН
Children deceived dad #comedy
00:19
yuzvikii_family
Рет қаралды 8 МЛН
Python + PyQt5 + PostgreSQL (часть 1)
25:25
Перлины: Владислав и Елена
Рет қаралды 14 М.
Магические методы в python. Dunder методы
1:00:45
ТОП 8 Редких и Удобных фишек в Python
10:57
ZProger [ IT ]
Рет қаралды 28 М.