- PVSM.RU - https://www.pvsm.ru -
Много копий сломано в обсуждениях того, почему питон эдакий бяка — не запрещает вызывать непубличные методы. И конечно, не раз звучали объяснения в духе «мы все тут взрослые люди», но похоже их было недостаточно, мне кажется, я наконец понял, как это объяснить более понятно, надеюсь, что это действительно так.
Напомню, что для private методов питон всего-лишь динамически изменяет имя и никак не ограничивает доступ к нему, а для protected не делает и этого, это просто соглашение об именовании методов, для тех кто не очень в курсе, есть дополнительные материалы тут [1] и тут [2].
Во-первых, начать нужно с вопроса, а почему язык должен запрещать вызывать какой-то код? Многие языки делают это, но из этого не следует, что это правильно и так должно быть.
Привычное != логичное.
Какие тут возможны варианты?
На самом деле за всеми этими рассуждениями стоит важный, можно сказать философский, принцип «Машина тупая, человек умный». Т.е. не машина должна принимать решения о том, что можно, а что нельзя, решение принимать человеку.
Можно парировать это сказав, что автор кода (человек или кто-то разумный) решил, что нельзя, но тут вступает в дело другой принцип, принцип свободы и ответственности: «Если ты уже поделился чем-то с другими, не диктуй им как они должны это использовать, они сами отвечают за свои действия», тут мы как раз пришли к тому, что мы все тут взрослые люди и отвечаем за свои действия.
Кто-то скажет, что типизация это же ограничение — верно, но это как раз случай, когда машина говорит человеку, ой я тупая, не знаю что мне делать — кого и к какому типу приводить, будь добр пояснить.
Кстати, есть отличный пример случая, когда авторы решили, что они могут сделать машину умной, но у них не получилось — это формат YAML, авторы написали большую спецификацию, которую похоже мало кто осиливает реализовать или она недостаточно однозначна [3], но там есть и принципиальные проблемы, не связанные с реализацией [4] когда попытки ямла угадать тип (сделать вид что машина умная) приводят к фиаско.
В питон мире нашёлся человек который это понял [5] (и подробно описал [6]). Его библиотека как раз выглядит как правильный подход — данные человекочитаемы, но для данных есть отдельно лежащая, написанная человеком схема, которая позволяет машине не прикидываться умной, а знать где какой тип, но к сожалению пока этот подход не стал мэйнстримом.
Надеюсь, мне удалось улучшить объяснение философии питона и высмеять другие подходы )
Автор: Alexey Shrub
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/321583
Ссылки в тексте:
[1] тут: https://habr.com/ru/post/426277/
[2] тут: https://habr.com/ru/post/455796/
[3] мало кто осиливает реализовать или она недостаточно однозначна: https://github.com/cblp/yaml-sucks
[4] принципиальные проблемы, не связанные с реализацией: https://arp242.net/yaml-config.html
[5] питон мире нашёлся человек который это понял: https://github.com/crdoconnor/strictyaml
[6] описал: https://hitchdev.com/strictyaml/#why-strictyaml
[7] Источник: https://habr.com/ru/post/457034/?utm_source=habrahabr&utm_medium=rss&utm_campaign=457034
Нажмите здесь для печати.