Python не запрещает вызов private/protected методов потому, что любит тебя :-)

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Много копий сломано в обсуждениях того, почему питон эдакий бяка — не запрещает вызывать непубличные методы. И конечно, не раз звучали объяснения в духе «мы все тут взрослые люди», но похоже их было недостаточно, мне кажется, я наконец понял, как это объяснить более понятно, надеюсь, что это действительно так.

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

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

Привычное != логичное.

Какие тут возможны варианты?

  1. Вы автор кода, по каким-то причинам решили, что данный метод не нужен в публичном доступе, ок, ваше право так думать, но почему это должно быть запрещено технически? Этот код вызывает демонов и его надо спрятать? Или это обычный код и другой такой же программист как вы может оказаться в ситуации о которой вы и подумать не можете и в которой ему нужно использовать этот код. Или вы думаете, что вы сверхчеловек и абсолютно точно знаете, что такого не может быть?
  2. Вы пользователь чужого кода — обычно о существовании непубличных методов вы ничего и не узнаете если не предпримете специальных усилий (protected методы могут быть задокументированы, но с указанием того какие они). Ну допустим вы сознательно и целенаправленно узнали о существовании какого-то непубличного метода и вызвали его, что случилось? Земля разверглась и оттуда выскочили Сатана с Саддамом? Или всё заработало как ожидалось? Слышу кто-то кричит — может сломаться при обновлении, конечно, но раз вы целенаправленно использовали непубличный метод, то понимаете этот риск (если нет, то вы не на своём месте). Тем более, что обновления это не спонтанный процесс как распад ядра атома урана, сломается всё в тестовом окружении. Конечно у некоторых бывает, что обновления имеют квантовую природу и происходят в самые непредсказуемые моменты в самых непредсказуемых местах, но тогда смешного говорить про какие-то там приватные методы, проблем будет полно и без них.

На самом деле за всеми этими рассуждениями стоит важный, можно сказать философский, принцип «Машина тупая, человек умный». Т.е. не машина должна принимать решения о том, что можно, а что нельзя, решение принимать человеку.

Можно парировать это сказав, что автор кода (человек или кто-то разумный) решил, что нельзя, но тут вступает в дело другой принцип, принцип свободы и ответственности: «Если ты уже поделился чем-то с другими, не диктуй им как они должны это использовать, они сами отвечают за свои действия», тут мы как раз пришли к тому, что мы все тут взрослые люди и отвечаем за свои действия.

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

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

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

Надеюсь, мне удалось улучшить объяснение философии питона и высмеять другие подходы )
Источник: https://habr.com/ru/post/457034/


Интересные статьи

Интересные статьи

Привет хабр! Меня зовут Глеб Пряхин, мне 14 лет, я написал голосового ассистента на python 3 и скомпилировал его в exe.Ссылка на скомпилированный вариант.Прошу протестиро...
Публикации Коллеги вы меня огорчаете, Коллеги, вы и меня огорчаете. Тоже и Не нужно делать из фреймворков культ — они не настолько сложны, чтобы делить людей на React и Angular разра...
Сегодня делимся с вами пошаговым руководством создания интерактивных карт для веб-приложения или блога. Просто сохраните эту статью в закладках. Хоть и существует, например, библиот...
Python-приложения используют множество скриптов. Этим и пользуются злоумышленники, чтобы подложить нам «свинью» — туда, где мы меньше всего ожидаем её увидеть. Одним из достоин...
Эта публикация написана после неоднократных обращений как клиентов, так и (к горести моей) партнеров. Темы обращений были разные, но причиной в итоге оказывался один и тот же сценарий, реализу...