Я хочу знать, почему Python не полностью объектно-ориентирован. Например, это не поддерживает частные, общедоступные модификаторы уровня защищенного доступа.
Каковы преимущества и недостатки этого? По этим выражениям Python подходит для какой приложения (Настольный, Научный, сеть или другой)?
Python не поддерживает строгую инкапсуляцию , которая является лишь одной из многих функций, связанных с термином «объектно-ориентированный».
Ответ - просто философия. Гвидо не любит что-то скрывать, и многие в сообществе Python согласны с ним.
Модификаторы доступа (общедоступный, частный, защищенный и т. Д.) Не требуются для программирования на основе классов . Это просто функция, как множественное наследование .
Я думаю, Python создан как гибрид. Вы можете писать в объектно-ориентированном или функциональном стилях.
Отличительными чертами объектной ориентации являются абстракция, инкапсуляция, наследование и полиморфизм. Что из этого отсутствует в Python?
Объектная ориентация - это континуум. Можно сказать, что Smalltalk - чистейший из чистых, а все остальные занимают разные места на шкале.
Никто не может сказать, какова ценность 100% чистоты. Можно написать очень хороший объектно-ориентированный код на языках, кроме Smalltalk и Python.
Python полезен во всех этих областях: научная (NumPy), веб (Django) и настольная.
Я считаю, что Python - это скорее очень практичный, прагматичный язык.
Концепции, которые предлагают ценность для разработчика, закладываются в него, без излишнего внимания к теологическим концепциям вроде "правильного ОО-дизайна" и прочего. Это язык для людей, которым нужно выполнять реальную работу.
Я думаю, что Python подходит для всех видов сред, хотя Desktop немного затруднен из-за отсутствия единого фреймворка. Для всех приложений удобно использовать фреймворк, например, NumPy для вычислений, Twisted или Django для веб-приложений, а WxWidgets или другие для Desktop.
Что именно является полностью объектно-ориентированным? Алан Кей сказал: "Вообще-то я придумал термин "объектно-ориентированный", и могу сказать, что не имел в виду C++". Признаться, он, вероятно, не имел в виду и python, но стоит отметить, что Smalltalk также защищает классы по соглашению, без мандата.
Гвидо однажды сказал, что «мы все здесь взрослые по согласию». Вот более подробное объяснение из давних времен: http://mail.python.org/pipermail/tutor/2003-October/025932.html
Существует соглашение, согласно которому подчеркивание означает частные элементы, и вы не должны их использовать. Если только вы не знаете, что делаете, и действительно этого не хотите.
В ссылке также упоминается другой способ выразить это в случае Perl:
«модуль Perl предпочел бы, чтобы вы не заходил в гостиную
потому что тебя не пригласили, не потому что у него есть дробовик. "