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

แชร์
ฝัง
  • เผยแพร่เมื่อ 1 ส.ค. 2024
  • ⭐ Курс ООП и Приват канал: 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 7 หลายเดือนก่อน +1

    Отличное видео!!! Очень мало где можно найти настолько высокую концентрацию содержательного материала уложенную в 10 минут, поэтому отдельное уважение! за 15минут (с перемотками) понял лучше, чем за 2х(Пол дня)!

  • @gh0st1k9
    @gh0st1k9 6 หลายเดือนก่อน

    Спасибо за полезное видео, вы первый кого мне интересно слушать по програмированию, спасибо :)

  • @user-xo1vf8ns6e
    @user-xo1vf8ns6e 7 หลายเดือนก่อน +2

    Очень хочу увидеть ролик по сетапу твоей системы - как именно ты настроил арч под себя.Глаза не нарадуются.

  • @lowGP
    @lowGP 7 หลายเดือนก่อน +5

    Вау, абстракт классы в питоне, он начинает получать функционал как у C# или Java. Теперь жду когда появятся структуры и интерфейсы.

    • @zproger
      @zproger  7 หลายเดือนก่อน +1

      Та абстракциям в питоне уже как 100 лет в обед :D

  • @okeygoogle3188
    @okeygoogle3188 7 หลายเดือนก่อน +3

    Эта тема может быть не совсем понятна питонистам, но я пишу на джаве, и там это в порядке вещей.
    Если вы пишите программу на несколько сотен строк кода - вам это не понадобится. Но если речь идёт о проекте, с с десятками классов и тысячами строк кода - то без абстрактных классов вам будет очень тяжело.
    Интересно ещё, есть-ли в пайтоне аналог интерфейсов?

    • @alexdubkov6998
      @alexdubkov6998 6 หลายเดือนก่อน

      Ну в джаве это понятно зачем: множественного наследованная нет, а язык заточен под ооп.
      Но в питоне? Import Abs? Хоть в одном проекте видели? Сами использовали? В джанге таких строк вообще нет (а это довольно развесистая штука). Protocol - ок. Для всяких соединительных штук, микросервисов и пр. полезен.
      Питон красив гибкостью.

  • @Sliwcom
    @Sliwcom 7 หลายเดือนก่อน

    Привет, а когда будет видио про твою сборку arch?

  • @wild_wizards
    @wild_wizards 7 หลายเดือนก่อน +21

    Разрабатываю уже давно, но смотря твои ролики без 100 грамм не разберешься. Данное видео не осилил, после 1.30 минуты информационного потока стало вообще не понятно какую задачу ты решаешь и какую мысль хочешь донести. Подумай, пожалуйста, над этим т.к. это учебный материал, а не конкурс экстрасенсов для разработчиков.

    • @zproger
      @zproger  7 หลายเดือนก่อน

      Без 100 грамм с абстракциями и не разобраться, это довольно сложная тема, тут нужно комбинировать практику + статьи + другие видео.

    • @wild_wizards
      @wild_wizards 7 หลายเดือนก่อน +6

      @@zproger Нам абстракции объясняли на примерах и перед этим рассказывали зачем они нужны и чем отличаются. Последовательная подача информации здесь ключевой элемент т.к. без понимания "А" не понятно будет и "Б". В ролике, к сожалению, сразу идет "Б" без понимания, что это за протоколы и какую задачу решают. Возможно, у тебя уже есть материал на эту тему, но человек который не посмотрел предыдущий ролик будет не в контексте. Возможно, следует сделать отсылку в ролике к нему, чтобы исключить данное недопонимание сего материала.
      Всех благ и с Новым годом.

    • @zproger
      @zproger  7 หลายเดือนก่อน +2

      Спасибо за развернутый комментарий, исправлю. Желаю также всего хорошего в новом году. 😉😉

    • @user-be7xc9uy6c
      @user-be7xc9uy6c 7 หลายเดือนก่อน

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

    • @user-zl5sp9yh1n
      @user-zl5sp9yh1n 7 หลายเดือนก่อน +1

      Вроде все довольно ясно

  • @shakapaker
    @shakapaker 7 หลายเดือนก่อน +1

    Чето как-то сложно, Вобщем это тоже самое но Протокол можно использолвать без наследования? А еще не понял Protocol это больше типо как для типизации чем проверки в рантайме? Я так понял Протокол удобно когда нет общего родительского класса допустим разные за смыслом штуки но они должны реализововать нужные методы?

    • @brothersstudio3566
      @brothersstudio3566 7 หลายเดือนก่อน +1

      Протокол - утка. (утиная типизация)
      В т.ч протокол - интерфейс. Т.е его можно как наследовать, если использоваться в качестве интерфейса, так и просто делать уткой, просто описывая методы. В свою очередь abc это абстракция, зачастую которую используют в базовых классах, определяя и реализовывая какие-либо методы, которые должны быть у будущих наследвников. Protocol или интерфейс не подразумевает реализации, он только описывает.
      З.Ы почти все базовые типы в пайтоне инвариантны, и то, как поступает автор, зачастую не есть отличный способ типизации, особенно если у вас функция использует некий метод обьекта, которого нет в базовом, но есть в наследнике, а наследников куча - типизировать базой, - неверно. Но верно то, что обьекты должны зависеть от абстракций или интерфейсов, а не конкретной реализации, но в пайтоне достижение подобного может быть еще той попоболью, особенно если есть обобщенные типы (дженерики) - код растет экспоненциально.
      Так-то вот идея автору разобрать ковариантность, инвариантность и контрвариантность.
      Для примера Dict - инвариантный тип-дженерик, когда как Mapping - ковариантный.

  • @user-bw5in2yo7s
    @user-bw5in2yo7s 7 หลายเดือนก่อน

    Можно, пожалуйста, настройку вимаса?

  • @faraname8990
    @faraname8990 6 หลายเดือนก่อน

    Добрый день, хотел узнать что у вас за ноутбук ?

  • @user-be7xc9uy6c
    @user-be7xc9uy6c 7 หลายเดือนก่อน +3

    Коротко и ясно без воды. Спасибо за видео. Как раз перед НГ в команде касались тему применения протоколов. Думал читать и вкуривать придётся. А тут видос))

    • @zproger
      @zproger  7 หลายเดือนก่อน

      Красота, рад что смог помочь ;)

  • @steefsteefler5760
    @steefsteefler5760 7 หลายเดือนก่อน

    Круто

    • @zproger
      @zproger  7 หลายเดือนก่อน

      Благодарю

  • @user-bj4vk5sg8v
    @user-bj4vk5sg8v 7 หลายเดือนก่อน +3

    Слушай у тебя круто оформлен арч и настроен Vim. Можешь сделать гайд пожалуйста по настройке?

    • @zproger
      @zproger  7 หลายเดือนก่อน +2

      Делаю потихоньку, проблемки немного с билдером)

    • @user-bj4vk5sg8v
      @user-bj4vk5sg8v 7 หลายเดือนก่อน

      @@zproger спасибо тебе, ты единственный кодерный блогер, которого смотрю. Буду ждать твой гайд.

  • @user-tz7gg2yq1d
    @user-tz7gg2yq1d 6 หลายเดือนก่อน

    Можеш поделитися дотами bspwm и полибара и picom

  • @rudolphsikorskiy18
    @rudolphsikorskiy18 7 หลายเดือนก่อน +1

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

  • @andren2889
    @andren2889 7 หลายเดือนก่อน +4

    надо было в конце рассказать что лучше использовать

    • @zproger
      @zproger  7 หลายเดือนก่อน +1

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

  • @n1ret
    @n1ret 7 หลายเดือนก่อน +1

    Оооо, то что надо, я как раз думал про это почитать, но было лень, писал raise NotImplementedError

    • @zproger
      @zproger  7 หลายเดือนก่อน +1

      Значит я вовремя :)))

    • @luwqz1
      @luwqz1 7 หลายเดือนก่อน

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

    • @7676562
      @7676562 7 หลายเดือนก่อน +1

      я уже и забыл про ABC, а про protocol даже и не знал - также все raise NotImpl... обмазал, придется все рефачить

  • @skylinerus3181
    @skylinerus3181 7 หลายเดือนก่อน +2

    Ничего не понял, но очень интересно🥲

    • @zproger
      @zproger  7 หลายเดือนก่อน

      Надо пощупать код индивидуально, думаю тогда все выйдет

  • @sm0ulder674
    @sm0ulder674 6 หลายเดือนก่อน +1

    Лайк если хочешь разбор пиздатейшего кастома арча

  • @krelvit
    @krelvit 7 หลายเดือนก่อน

    Двойное нижнее подчеркивание не имеет отношение к защите атрибутов или методов. Их задача - name mangling. Этот механизм предназначен для предотвращения конфликтов имен в подклассах. Если хотите пометить атрибут, как приватный, достаточно одного нижнего подчеркивания.

  • @nikitatimofeenko9351
    @nikitatimofeenko9351 7 หลายเดือนก่อน +5

    python и безопасный софт, звучит как антонимы

    • @zproger
      @zproger  7 หลายเดือนก่อน +4

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

    • @nikitatimofeenko9351
      @nikitatimofeenko9351 7 หลายเดือนก่อน +1

      Rust тема, жду по нему видосы@@zproger

    • @nakidai
      @nakidai 6 หลายเดือนก่อน

      @@nikitatimofeenko9351 omg rust fan detected

  • @dimanandreev
    @dimanandreev 7 หลายเดือนก่อน

    newyear23 :D

  • @shakapaker
    @shakapaker 7 หลายเดือนก่อน

    Это шрифт JB Mono? Кстати хочу порекомендовать попробуй JuliaMono

    • @zproger
      @zproger  7 หลายเดือนก่อน

      Да. Спасибо за шрифт, попробую.

  • @user-pg8ry1tm3t
    @user-pg8ry1tm3t 7 หลายเดือนก่อน +1

    Т.е. абс это в общем наследование с полиморфизмом и виртуальным механизмом, в то время как протокол- это не про наследование, а про перегрузку функций, этакий адхок полиморф?..

    • @zproger
      @zproger  7 หลายเดือนก่อน +1

      ABC заставляет явно определять различные механизмы, а Protocol делает это неявно. Только когда объект будет похож на протокол, только тогда он будет к нему принадлежать.

    • @user-pg8ry1tm3t
      @user-pg8ry1tm3t 7 หลายเดือนก่อน

      Протокол, это что-то вроде контракта, который необходимо реализовать хотя бы частично… так получается?.. абсы это понятно, в принципе обычный чисто виртуальный класс в плюсах, не имеющий реализации, служащий только для наследования, вроде интерфейса.. а вот с протоколом не сталкивался 🥴

    • @luwqz1
      @luwqz1 7 หลายเดือนก่อน

      ABC - явный интерфейс
      Protocol - неявный интерфейс

  • @user-rx4dx5vr3z
    @user-rx4dx5vr3z 7 หลายเดือนก่อน

    когда видео про создание игры?(

    • @zproger
      @zproger  7 หลายเดือนก่อน

      Про грибка?))

  • @sergeylitvinov2990
    @sergeylitvinov2990 7 หลายเดือนก่อน +2

    Я абсолютно ничего не понял...Возможно чтобы понимать, нужно знать что такое ABC и Protocol

    • @zproger
      @zproger  7 หลายเดือนก่อน

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

  • @user-sl5yj1un8o
    @user-sl5yj1un8o 4 หลายเดือนก่อน

    А почему просто не программировать на нормальном ООП языке, PHP или Java например)

    • @zproger
      @zproger  4 หลายเดือนก่อน

      Лично я язык выбираю под определенную задачу, скажем я не выберу Java, только потому что там ООП лучше, если при этом он не решает мою задачу.

    • @ruden6623
      @ruden6623 4 หลายเดือนก่อน

      Для каждой задачи свой язык выбирается. Те же нейронки просто писать на Python, на C/C++ пишут драйвера и т.д.

    • @ruden6623
      @ruden6623 4 หลายเดือนก่อน

      (это не значит, что на C/C++ нельзя написать нейронку, просто обычно для этого используют другой язык)

  • @noobodykms
    @noobodykms 7 หลายเดือนก่อน +1

    Первый

    • @zproger
      @zproger  7 หลายเดือนก่อน

      😎😎😎

  • @ia_prosto_coder4208
    @ia_prosto_coder4208 6 หลายเดือนก่อน

    Понял сразу, но все таки быстровато. Если бы изложение материала было немного пемедленей. А то такое ощущение что автор куда-то все время опаздывает

  • @MrALEXUS100
    @MrALEXUS100 7 หลายเดือนก่อน

    Чего бл..., о чем это было, бро?