Однако ООП полезно при долгосрочной разработке программы несколькими людьми, так как упрощает понимание кода. Python соответствует принципам объектно-ориентированного программирования. В python всё является объектами – и строки, и списки, и словари, и всё остальное. В основе концепции объектно-ориентированного программирования лежит понятие объекта — некой сущности, которая объединяет в себе поля (данные) и методы (выполняемые объектом действия). В одном эксперименте[22] скриптовые и функциональные языки, в частности, Haskell, показали 2-3 кратный выигрыш во времени программирования и объёме кода по сравнению с программами на C++. Авторы признают, что полученные ими данные не составляют репрезентативной выборки и воздерживаются от категоричных выводов.
Однако общность механизма обмена сообщениями имеет и другую сторону — «полноценная» передача сообщений требует дополнительных накладных расходов, что не всегда приемлемо. Поэтому во многих современных объектно-ориентированных языках программирования используется концепция «отправка сообщения как вызов метода» — объекты имеют доступные извне методы, вызовами которых и обеспечивается взаимодействие объектов. Данный подход реализован в огромном количестве языков программирования, в том числе C++, Object Pascal, Java, Oberon-2. Однако, это приводит к тому, что сообщения уже не являются самостоятельными объектами, и, как следствие, не имеют атрибутов, что сужает возможности программирования. Некоторые языки используют гибридное представление, демонстрируя преимущества одновременно обоих подходов — например, CLOS, Python. Касательно ООП, в Python, в отличие от C++ и Java, отсутствуют модификаторы доступа к полям и методам класса, атрибуты и поля у объектов могут создаваться на лету в ходе исполнения программы, а все методы являются виртуальными.
Управление контекстом выполнения[править править код]
В начало каждого модуля, класса, функции вставляется строка документации — docstring[en]. Строки документации остаются в коде на момент времени исполнения, и в язык встроен доступ к документации[83](переменная __doc__), что используется современными IDE (Интегрированная среда разработки) (например, Eclipse). Вместо того, чтобы встроить в ядро Python всю функциональность языка, он был спроектирован таким образом, чтобы быть легко расширяемым. Это сделало язык популярным средством добавления программируемых интерфейсов к существующим приложениям. Видение Гвидо ван Россума маленького ядра с большой стандартной библиотекой и легко расширяемым интерпретатором проистекало из негативного опыта разработки языка ABC, который придерживался противоположного подхода[64].
Взаимодействие агентов происходит посредством изменения среды, в которой они находятся. Объектно-ориентированное программирование (сокращённо ООП) — это парадигма разработки программного обеспечения, согласно которой приложения состоят из объектов. Являясь приложением с открытым исходным кодом, интерпретатор Python используется по всему миру и поставляется в составе операционных систем на базе Linux, а также в компьютерах от фирмы Apple. Python популярен среди индивидуальных разработчиков, но также используется объектно ориентированное программирование python крупными компаниями в достаточно серьёзных продуктах, ориентированных на получение прибыли[186]. В Dropbox также активно применяется Python, а из-за сложностей динамической типизации и огромного количества кода компания перешла к статической типизации с помощью открытого проекта Mypy[187] Также Python активно используется в Facebook[188] и Instagram[189]. Многие компании используют Python для тестирования аппаратного обеспечения, среди этих компаний значатся Intel, Cisco, Hewlett-Packard и IBM.
Система отступов[править править код]
Она предназначена для тех, кто хочет понять суть этой парадигмы разработки, а не просто научиться использовать классы и объекты. Будучи языком общего назначения Python применим почти во всех сферах деятельности. Фактически Python используется практически любой солидной компанией тем или иным образом как для выполнения текущих задач, так и в тестировании, администрировании или в разработке программных продуктов[186]. В Java и Python все объекты создаются в куче, в то время как C++ позволяет создавать объекты как в куче, так и на стеке, в зависимости от используемого синтаксиса[136].
Кроме того, Google спонсирует разработку Python с 2010 года[191][192], и поддержку PyPI, основной системы распространения пакетов для Python[191][193]. Python и подавляющее большинство библиотек к нему бесплатны и поставляются в исходных кодах. Более того, в отличие от многих открытых систем, лицензия никак не ограничивает использование Python в коммерческих разработках и не налагает никаких обязательств, кроме указания авторских прав. Библиотека NumPy для работы с многомерными массивами позволяет иногда достичь производительности научных расчётов, сравнимой со специализированными пакетами.
Отличия от языка C[править править код]
Часто они состязаются друг с другом, пытаясь выяснить, кто может создать «самые замысловатые и красивые сложности». … соперники полагают, что должны соревноваться с чужими «украшательствами» путём добавления собственных. Несмотря на то, что большая часть кода C будет справедлива и для C++, C++ не является надмножеством C и не включает его в себя. Это отличает его от Objective C, ещё одного усовершенствования C для ООП, как раз являющегося надмножеством C.
Затем в коде следует ключевое слово class, которое говорит о том, что нужно создать класс с определённым именем. Здесь создаётся класс Program, у которого есть метод Main() — с него начинается выполнение программы, поэтому его называют точкой входа. К примеру, возьмём числа типа Int64 и создадим с помощью них числа с плавающей точкой. Такой класс, конечно, уже есть, но мы можем переопределить его по-своему. Разработчики не пишут какую-то функцию, которая будет делать что-то для программы в целом.
Объектно-ориентированное программирование в С++. Р. Лафоре
Поддерживает такие парадигмы программирования, как процедурное программирование, объектно-ориентированное программирование, обобщённое программирование. Язык имеет богатую стандартную библиотеку, которая включает в себя распространённые контейнеры и алгоритмы, ввод-вывод, регулярные выражения, поддержку многопоточности и другие возможности. C++ сочетает свойства как высокоуровневых, так и низкоуровневых языков[4][5]. В сравнении с его предшественником — языком C — наибольшее внимание уделено поддержке объектно-ориентированного и обобщённого программирования[5]. Взгляд на программирование «под новым углом» (отличным от процедурного) предложили Алан Кэй и Дэн Ингаллс в языке Smalltalk. Здесь понятие класса стало основообразующей идеей для всех остальных конструкций языка (то есть класс в Смолтоке является примитивом, посредством которого описаны более сложные конструкции).
- Роджер Кинг аргументированно настаивал, что его кот является объектно-ориентированным.
- Хотя эти результаты не могут быть прямо перенесены на C++, но всё же представляют интерес с учётом того, что многие недостатки C++ унаследованы от Си.
- Python популярен среди индивидуальных разработчиков, но также используется крупными компаниями в достаточно серьёзных продуктах, ориентированных на получение прибыли[186].
- Кроме прочих своих достоинств, кот демонстрирует характерное поведение, реагирует на сообщения, наделён унаследованными реакциями и управляет своим, вполне независимым, внутренним состоянием.
- Хотя есть исследования[32], утверждающие, что программисты на Си тратят около % общего времени разработки (не считая отладки) на управление памятью, при сопоставлении общей производительности разработчиков[22] Си и C++ оказываются близки.
Наследование позволяет создавать производные объекты без необходимости повторного написания кода, а полиморфизм заключается в возможности переопределения любых методов объекта (в Python все методы являются виртуальными[89]), а также в перегрузке методов и операторов. Перегрузка методов в Python реализуется за счёт возможности вызова одного и того же метода с разным набором аргументов[88]. Особенностью Python является возможность модифицировать классы после их объявления, добавляя в них новые атрибуты и методы[44], также можно модифицировать и сами объекты, в результате чего классы могут использоваться как структуры для хранения произвольных данных[89]. Вспомнив опыт своей диссертации, Страуструп решил дополнить язык C (преемник BCPL) возможностями, имевшимися в языке Симула.
Вычислительная эффективность[править править код]
Применение интроспекции является важной частью того, что называют Pythonic style, и широко применяется в библиотеках и фреймворках Python, таких как PyRO, PLY, Cherry, Django и др., значительно экономя время использующего их программиста. Язык обладает чётким и последовательным синтаксисом, продуманной модульностью и масштабируемостью, благодаря чему исходный код написанных на Python программ легко читаем. При передаче аргументов в функции Python использует вызов по соиспользованию (call-by-sharing)[80]. Разработчики языка Python придерживаются определённой философии программирования, называемой «The Zen of Python» («Дзен Пито́на», или «Дзен Па́йтона»)[62].
Большинство программ является однопоточными, либо запускает всего несколько потоков, из которых часть в каждый конкретный момент простаивает в ожидании. Персональные компьютеры обычно имеют небольшое количество процессорных ядер, которые загружены параллельно исполняющимися в системе процессами, так что реальные потери производительности на персональных компьютерах из-за GIL невелики. Lua проще, чем Python, и имеет более классический паскалеподобный синтаксис. В языке всего восемь встроенных типов данных, а все структурированные типы (структуры, перечисления, массивы, множества) моделируются на основе единственного встроенного типа «таблица», который фактически является гетерогенным словарём. ООП реализуется на таблицах и строится по прототипной модели, как в JavaScript. Python предоставляет больше возможностей, а его структурированные типы данных имеют каждый свою реализацию, что повышает производительность.