ABC или Protocol в Python? Что лучше и когда стоит использовать?

  Рет қаралды 8,719

ZProger [ IT ]

ZProger [ IT ]

Күн бұрын

⭐ Курс ООП и Приват канал: www.zproger-school.com/?...
⭐ Телеграм канал: t.me/+n0cS6ONNo28zODEx
В данном видео рассмотрим важные отличия ABC и Protocol в Python. Узнаем об истинном назначении инструментов. Многие неправильно поняли принцип работы ABC / Protocol, и цель этого видео - показать реальные примеры использования.
📁 Github: github.com/Zproger
📁 Все плейлисты с уроками: www.youtube.com/@zproger/play...
📁 Связаться со мной: zproger777@gmail.com
📁 Поддержать канал: github.com/Zproger/donate
Тайм-коды:
0:00 - Почему важно понимать это?
0:53 - Простой пример работы ABC с типами
3:18 - Комбинация ABC с property. Почему это важно?
4:28 - Сравнение прошлых примеров с Protocol. Чем отличается ABC от Protocol?
6:08 - Как привязать атрибуты с помощью Protocol?
7:55 - Наследование в Protocol, почему это круто?
8:57 - Почему важно соблюдать сигнатуру в Protocol?
9:49 - Как реализовать утиную типизацию с Protocol Python?
10:34 - Как Protocol позволяет защитить проект от ошибок?

Пікірлер: 61
@user-fl3ky1ce1y
@user-fl3ky1ce1y 5 ай бұрын
Отличное видео!!! Очень мало где можно найти настолько высокую концентрацию содержательного материала уложенную в 10 минут, поэтому отдельное уважение! за 15минут (с перемотками) понял лучше, чем за 2х(Пол дня)!
@user-xo1vf8ns6e
@user-xo1vf8ns6e 5 ай бұрын
Очень хочу увидеть ролик по сетапу твоей системы - как именно ты настроил арч под себя.Глаза не нарадуются.
@gh0st1k9
@gh0st1k9 5 ай бұрын
Спасибо за полезное видео, вы первый кого мне интересно слушать по програмированию, спасибо :)
@Sliwcom
@Sliwcom 5 ай бұрын
Привет, а когда будет видио про твою сборку arch?
@lowGP
@lowGP 5 ай бұрын
Вау, абстракт классы в питоне, он начинает получать функционал как у C# или Java. Теперь жду когда появятся структуры и интерфейсы.
@zproger
@zproger 5 ай бұрын
Та абстракциям в питоне уже как 100 лет в обед :D
@faraname8990
@faraname8990 5 ай бұрын
Добрый день, хотел узнать что у вас за ноутбук ?
@shakapaker
@shakapaker 5 ай бұрын
Чето как-то сложно, Вобщем это тоже самое но Протокол можно использолвать без наследования? А еще не понял Protocol это больше типо как для типизации чем проверки в рантайме? Я так понял Протокол удобно когда нет общего родительского класса допустим разные за смыслом штуки но они должны реализововать нужные методы?
@brothersstudio3566
@brothersstudio3566 5 ай бұрын
Протокол - утка. (утиная типизация) В т.ч протокол - интерфейс. Т.е его можно как наследовать, если использоваться в качестве интерфейса, так и просто делать уткой, просто описывая методы. В свою очередь abc это абстракция, зачастую которую используют в базовых классах, определяя и реализовывая какие-либо методы, которые должны быть у будущих наследвников. Protocol или интерфейс не подразумевает реализации, он только описывает. З.Ы почти все базовые типы в пайтоне инвариантны, и то, как поступает автор, зачастую не есть отличный способ типизации, особенно если у вас функция использует некий метод обьекта, которого нет в базовом, но есть в наследнике, а наследников куча - типизировать базой, - неверно. Но верно то, что обьекты должны зависеть от абстракций или интерфейсов, а не конкретной реализации, но в пайтоне достижение подобного может быть еще той попоболью, особенно если есть обобщенные типы (дженерики) - код растет экспоненциально. Так-то вот идея автору разобрать ковариантность, инвариантность и контрвариантность. Для примера Dict - инвариантный тип-дженерик, когда как Mapping - ковариантный.
@okeygoogle3188
@okeygoogle3188 5 ай бұрын
Эта тема может быть не совсем понятна питонистам, но я пишу на джаве, и там это в порядке вещей. Если вы пишите программу на несколько сотен строк кода - вам это не понадобится. Но если речь идёт о проекте, с с десятками классов и тысячами строк кода - то без абстрактных классов вам будет очень тяжело. Интересно ещё, есть-ли в пайтоне аналог интерфейсов?
@alexdubkov6998
@alexdubkov6998 4 ай бұрын
Ну в джаве это понятно зачем: множественного наследованная нет, а язык заточен под ооп. Но в питоне? Import Abs? Хоть в одном проекте видели? Сами использовали? В джанге таких строк вообще нет (а это довольно развесистая штука). Protocol - ок. Для всяких соединительных штук, микросервисов и пр. полезен. Питон красив гибкостью.
@user-bw5in2yo7s
@user-bw5in2yo7s 5 ай бұрын
Можно, пожалуйста, настройку вимаса?
@rudolphsikorskiy18
@rudolphsikorskiy18 5 ай бұрын
Круто конечно, а как же дзен пайтона явное лучше не явного? В приложенных примерах нужно следить за сигнатурами функций, может лучше использовать инъекции зависимостей вместо утиной типизации?
@wild_wizards
@wild_wizards 5 ай бұрын
Разрабатываю уже давно, но смотря твои ролики без 100 грамм не разберешься. Данное видео не осилил, после 1.30 минуты информационного потока стало вообще не понятно какую задачу ты решаешь и какую мысль хочешь донести. Подумай, пожалуйста, над этим т.к. это учебный материал, а не конкурс экстрасенсов для разработчиков.
@zproger
@zproger 5 ай бұрын
Без 100 грамм с абстракциями и не разобраться, это довольно сложная тема, тут нужно комбинировать практику + статьи + другие видео.
@wild_wizards
@wild_wizards 5 ай бұрын
@@zproger Нам абстракции объясняли на примерах и перед этим рассказывали зачем они нужны и чем отличаются. Последовательная подача информации здесь ключевой элемент т.к. без понимания "А" не понятно будет и "Б". В ролике, к сожалению, сразу идет "Б" без понимания, что это за протоколы и какую задачу решают. Возможно, у тебя уже есть материал на эту тему, но человек который не посмотрел предыдущий ролик будет не в контексте. Возможно, следует сделать отсылку в ролике к нему, чтобы исключить данное недопонимание сего материала. Всех благ и с Новым годом.
@zproger
@zproger 5 ай бұрын
Спасибо за развернутый комментарий, исправлю. Желаю также всего хорошего в новом году. 😉😉
@user-be7xc9uy6c
@user-be7xc9uy6c 5 ай бұрын
Я ставлю на паузу, разбираю код на экране, и продолжаю смотреть только когда пойму код.
@user-zl5sp9yh1n
@user-zl5sp9yh1n 5 ай бұрын
Вроде все довольно ясно
@user-tz7gg2yq1d
@user-tz7gg2yq1d 4 ай бұрын
Можеш поделитися дотами bspwm и полибара и picom
@user-bj4vk5sg8v
@user-bj4vk5sg8v 5 ай бұрын
Слушай у тебя круто оформлен арч и настроен Vim. Можешь сделать гайд пожалуйста по настройке?
@zproger
@zproger 5 ай бұрын
Делаю потихоньку, проблемки немного с билдером)
@user-bj4vk5sg8v
@user-bj4vk5sg8v 5 ай бұрын
@@zproger спасибо тебе, ты единственный кодерный блогер, которого смотрю. Буду ждать твой гайд.
@user-be7xc9uy6c
@user-be7xc9uy6c 5 ай бұрын
Коротко и ясно без воды. Спасибо за видео. Как раз перед НГ в команде касались тему применения протоколов. Думал читать и вкуривать придётся. А тут видос))
@zproger
@zproger 5 ай бұрын
Красота, рад что смог помочь ;)
@n1ret
@n1ret 5 ай бұрын
Оооо, то что надо, я как раз думал про это почитать, но было лень, писал raise NotImplementedError
@zproger
@zproger 5 ай бұрын
Значит я вовремя :)))
@luwqz1
@luwqz1 5 ай бұрын
да жесть это плохая практика к тому же в abc еще в рантайме будет ошибка о том что методы не реализованы
@7676562
@7676562 5 ай бұрын
я уже и забыл про ABC, а про protocol даже и не знал - также все raise NotImpl... обмазал, придется все рефачить
@skylinerus3181
@skylinerus3181 5 ай бұрын
Ничего не понял, но очень интересно🥲
@zproger
@zproger 5 ай бұрын
Надо пощупать код индивидуально, думаю тогда все выйдет
@steefsteefler5760
@steefsteefler5760 5 ай бұрын
Круто
@zproger
@zproger 5 ай бұрын
Благодарю
@nikitatimofeenko9351
@nikitatimofeenko9351 5 ай бұрын
python и безопасный софт, звучит как антонимы
@zproger
@zproger 5 ай бұрын
Ну почему, если руки прямые, то никаких проблем не вижу, на тех же плюсах или сишке софт в разы тяжелее сделать безопасным. В этом плане мне больше нравится Rust, если именно о безопасности говорить.
@nikitatimofeenko9351
@nikitatimofeenko9351 5 ай бұрын
Rust тема, жду по нему видосы@@zproger
@nakidai
@nakidai 4 ай бұрын
@@nikitatimofeenko9351 omg rust fan detected
@krelvit
@krelvit 5 ай бұрын
Двойное нижнее подчеркивание не имеет отношение к защите атрибутов или методов. Их задача - name mangling. Этот механизм предназначен для предотвращения конфликтов имен в подклассах. Если хотите пометить атрибут, как приватный, достаточно одного нижнего подчеркивания.
@andren2889
@andren2889 5 ай бұрын
надо было в конце рассказать что лучше использовать
@zproger
@zproger 5 ай бұрын
Упс, забыл добавить. Но в целом тут сильно зависит от задачи, если нужна явная привязка, тогда ABC, если нужна утиная типизация и неявное определение, тогда Protocol.
@shakapaker
@shakapaker 5 ай бұрын
Это шрифт JB Mono? Кстати хочу порекомендовать попробуй JuliaMono
@zproger
@zproger 5 ай бұрын
Да. Спасибо за шрифт, попробую.
@sm0ulder674
@sm0ulder674 5 ай бұрын
Лайк если хочешь разбор пиздатейшего кастома арча
@dimanandreev
@dimanandreev 5 ай бұрын
newyear23 :D
@user-pg8ry1tm3t
@user-pg8ry1tm3t 5 ай бұрын
Т.е. абс это в общем наследование с полиморфизмом и виртуальным механизмом, в то время как протокол- это не про наследование, а про перегрузку функций, этакий адхок полиморф?..
@zproger
@zproger 5 ай бұрын
ABC заставляет явно определять различные механизмы, а Protocol делает это неявно. Только когда объект будет похож на протокол, только тогда он будет к нему принадлежать.
@user-pg8ry1tm3t
@user-pg8ry1tm3t 5 ай бұрын
Протокол, это что-то вроде контракта, который необходимо реализовать хотя бы частично… так получается?.. абсы это понятно, в принципе обычный чисто виртуальный класс в плюсах, не имеющий реализации, служащий только для наследования, вроде интерфейса.. а вот с протоколом не сталкивался 🥴
@luwqz1
@luwqz1 5 ай бұрын
ABC - явный интерфейс Protocol - неявный интерфейс
@user-rx4dx5vr3z
@user-rx4dx5vr3z 5 ай бұрын
когда видео про создание игры?(
@zproger
@zproger 5 ай бұрын
Про грибка?))
@sergeylitvinov2990
@sergeylitvinov2990 5 ай бұрын
Я абсолютно ничего не понял...Возможно чтобы понимать, нужно знать что такое ABC и Protocol
@zproger
@zproger 5 ай бұрын
Так в видео же рассказал что это такое) Там достаточно пару примеров, однако добавлю, что я когда только изучал это, то тоже далеко не сразу понял. Абстракции это очень сложная для понимания тема, и нужно время, чтобы осознать принцип работы.
@user-sl5yj1un8o
@user-sl5yj1un8o 2 ай бұрын
А почему просто не программировать на нормальном ООП языке, PHP или Java например)
@zproger
@zproger 2 ай бұрын
Лично я язык выбираю под определенную задачу, скажем я не выберу Java, только потому что там ООП лучше, если при этом он не решает мою задачу.
@ruden6623
@ruden6623 2 ай бұрын
Для каждой задачи свой язык выбирается. Те же нейронки просто писать на Python, на C/C++ пишут драйвера и т.д.
@ruden6623
@ruden6623 2 ай бұрын
(это не значит, что на C/C++ нельзя написать нейронку, просто обычно для этого используют другой язык)
@ia_prosto_coder4208
@ia_prosto_coder4208 5 ай бұрын
Понял сразу, но все таки быстровато. Если бы изложение материала было немного пемедленей. А то такое ощущение что автор куда-то все время опаздывает
@noobodykms
@noobodykms 5 ай бұрын
Первый
@zproger
@zproger 5 ай бұрын
😎😎😎
@MrALEXUS100
@MrALEXUS100 5 ай бұрын
Чего бл..., о чем это было, бро?
Multiprocessing: используем все ядра
27:50
Python Russian
Рет қаралды 1,8 М.
Black Magic 🪄 by Petkit Pura Max #cat #cats
00:38
Sonyakisa8 TT
Рет қаралды 38 МЛН
Como ela fez isso? 😲
00:12
Los Wagners
Рет қаралды 34 МЛН
$10,000 Every Day You Survive In The Wilderness
26:44
MrBeast
Рет қаралды 102 МЛН
Protocol Or ABC In Python - When to Use Which One?
23:45
ArjanCodes
Рет қаралды 196 М.
ДЕКОРАТОР PYTHON / ВСЕ ЧТО НУЖНО ЗНАТЬ НА СОБЕСЕ
28:31
Сергей Соловьев
Рет қаралды 1,6 М.
Protocols vs ABCs in Python - When to Use Which One?
15:31
ArjanCodes
Рет қаралды 30 М.
Ruff в Python: Этот инструмент изменит все
10:21
Black Magic 🪄 by Petkit Pura Max #cat #cats
00:38
Sonyakisa8 TT
Рет қаралды 38 МЛН