Инкапсуляция в Python (и не только)

Поделиться
HTML-код
  • Опубликовано: 19 июн 2024
  • Остро реагирую на проблемы русскоязычного комьюнити и рассказываю о том, как работает инкапсуляция в Python.
    Канал в тг - t.me/PythonClinicChnl
    Таймкоды:
    00:00 - статья на википедии
    03:31 - разбор примеров из статьи
    09:30 - базовый сценарий на Python
    10:36 - сокрытие атрибутов
    13:16 - сокрытие методов
    14:39 - ещё немного логики
    17:08 - суть инкапсуляции
    18:06 - аутро

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

  • @user-in3jd6cm2t
    @user-in3jd6cm2t Год назад +5

    Наконец-то я увидел понятное видео про инкапсуляцию, спасибо большое!)

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

      всегда пожалуйста)

  • @vladdragunov5526
    @vladdragunov5526 Месяц назад +1

    Добрый день, вот уже не первый раз оставляю комент под видео)
    Спасибо большое за понятное объяснение)
    Вот смотрел видео по поводу Абстрактных классов, есть антагонист абстрактных классов это протоколы, очень хотелось бы послушать видео на эту тему, а также сравнения протоколов с абстракцией

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

      добавил в свой список)

  • @Qustoos
    @Qustoos 7 месяцев назад

    👍👍👍👍

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

    и да в С/C++ а Джаве тем более - если у кода есть доступ до бинарного представления объекта то сокрытие в этом смысле нет - Сокрытие это как и статические типы в компилируемых языках - сервис который предоставляется компилятором а не рантаймом(интрепретатором расширяющим хост машину нужными свойствами времени исполнения) для более раннего контроля - ваще этикет(а протоколы доступа это и есть этикет взаимодействия с инфо-сущьностями) тем и полезен, что уменьшает возможное пространство состояний - всё по классике из goto considered harmfull :)

  • @KortezR
    @KortezR 9 месяцев назад

    До изучения ООП в python всегда тоже думал, что инкапсуляция связана именно с сокрытием данных. Скорее всего сказалось обучение в универе, где на курсах по плюсам, шарпу и джаве именно про это и говорилось. И это казалось логичным, так как в голове я всегда представлял инкапсуляцию от in capsule - то есть в капсуле, защищенной от внешних воздействий. Но получается, что это не совсем так, и в принципе инкапсуляция позволяет просто упаковать данные и интерфейс так, как это задумывается, с учетом тех данных и методов, которые не задумывались как общедоступные для рядового пользователя (поправьте, если ошибся, пожалуйста)
    Вообще я всегда думал, что инкапсуляция это что-то против злых людей, которые хотят данные узнать или нашкодить, но походу это не совсем так

    • @pythonclinic
      @pythonclinic  9 месяцев назад +1

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

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

    терминологически Агрегация предшествовала и когда и АТД (clu привет) ужо были. ведь инкапсуляция (в ру предшественик капсуль в известно чём да и капсула с чем либо либо капсула спускаемого аппарата тож намекает какбе) - ООП хайп при той ещё хрупкой мат опоре - даже структурное программирование (да да теорема Боема-Якопини) за несколько десятилетий дало и культ и норм инженерную практику - ща вон наследование везде той же агрегацией лучшие дома рекамендуют замещать
    ваще Сокрытие оно бывает полезным в первую очередь для снижения графа связности

  • @arinawitch6928
    @arinawitch6928 2 месяца назад

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

    • @pythonclinic
      @pythonclinic  Месяц назад +1

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

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

      @@pythonclinic спасибо!

  • @user-nu3ot7td1j
    @user-nu3ot7td1j 10 месяцев назад

    интересно, но все же более интересует момент, а как думают сами разработчики пайтона (например в вашем отделе)? если я на собеседовании скажу, что инкапсуляция это не только сокрытие, а нечто больше, но что инкапсуляция включает в себя сокрытие, со стороны человека, который будет меня собеседовать, это будет как больше плюс или как минус ? Собственно говоря в чем вопрос мой, есть такие вещи над которыми разработчики могут спорить постоянно и единого ответа нет, а есть все же вещи, на которые есть единый правильный ответ. Инкапсуляция относится к первому или ко второму ?

    • @pythonclinic
      @pythonclinic  10 месяцев назад +2

      и к первому, и ко второму) я рекомендую пользоваться более широким определением в стиле "предоставление интерфейса для работы с данными", и дополнительно пояснить, что сюда входит и сокрытие данных тоже, несмотря на то, что в пайтон оно номинальное
      на интервью наша цель всё-таки пройти интервью, лучше бить по площади))

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

    Хм... теперь понятно, почему питон не любят безопасники.
    Я вот базист, пишу на PL/SQL, и у меня в пакете (во многом аналог объекта) может скажем быть приватный метод, который делает что-то серьёзное, например, очищает/перезаливает таблицу, заданную в параметре.
    А зовётся он из публичной процедуры, которая проверяет к примеру, что запрошенная таблица у меня в списке разрешённых. И вот я даю права на исполнение такого объекта некоторому пользователю.
    У меня чётко прописано что достучаться до очистки можно только через проверку. Иначе у пользователя, которому выданы эти права, не выйдет.
    А в питоне, получается, таких гарантий нет, и любой кулхацкер сотворит что угодно. Нет?

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

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

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

    Как на интервью тебе рассказать, что такое инкапсуляция???

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

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

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

      @@pythonclinic ну вот про сокрытие данных это же не так)))) скрываем то реализацию, мы предостовляем api к примеру с методом calc_distance, а как эта дистанция считается не показываем
      Или еще один пример висят часы на стене показывают время, а как это время считается никто не знает кроме производителя

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

      хорошая формулировка, вы приняты))

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

    скину своему другу "старообряднику", который именно так и говорит слово в слово "Python не поддерживает ООП, в нём же нет инкапсуляции".)

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

      начиная с версии 3.0 Python и ООП это синонимы)