Python — основные концепции


Оглавление (нажмите, чтобы открыть):

Python — основные концепции :: Бройтман Олег

Страница: 1 из 3
Размер шрифта / +
Цвет теста
Цвет фона
скрыть

Аннотация: Python — объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.

Python — основные концепции

Python — объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход. Python поддерживает множественное наследование, переопределение инфиксных операторов, причем можно переопределить операцию как для левого операнда, так и для правого; в версии 2.1 есть полное переопределение операторов сравнения (механизм rich comparison для объектов, поддерживающих частичное упорядочивание, например, матриц).

В Python имеются исключения и механизм их перехвата; таким образом программист может построить правильную обработку ошибок и создать надежную программу. Встроенные механизмы интроспекции позволяют опрашивать интерфейсы объектов во время выполнения программы. Например, можно узнать количество и имена параметров функции; эту интроспекцию использует Zope, чтобы подготовить правильный список параметров функции при вызове ее из web.

Из современных языков Python можно сравнить в первую очередь с Java и Perl. Python выполняет все обещания, которые дала, но не выполнила Java. Python очень хорошо переносим. Он работает на всех платформах, на которых есть Java, и еще на многих. Мало найдется таких платформ, на которые Python не перенесен. Я не говорю про UNIX и Windows, конечно — с точки зрения переносимости куда интереснее такие платформы как Mac, Amiga, Palm, RiscOS, AS/400 и многие другие. Для особых любителей Java есть Jython. Он состоит из двух частей: во-первых, это интерпретатор Pyhon, написанный на Java, а во-вторых это компилятор Python в байт-код Java. В сравнении с Perl — Python как язык ему совершенно равномощен, но избавлен от великого множества неприятностей и неудобств, присущих Perl. Python обладает богатой стандартной библиотекой, плюс великим множеством модулей, доступных в Интернете. Для пользователей Windows есть пакет win32, из которого доступны практически все функции Windows API, DDE, COM.

Существует Русскоязычная Группа Пользователей Python и Zope. Сайт группы расположен по адресу http://zope.net.ru/ . На список рассылки можно подписаться, послав по адресу mailto:majordomo@list.glas.net?body=subscribe+python письмо с телом subscribe python.

Основные структуры управления

Python — вполне обычный, можно сказать, «традиционный» язык программирования. Все привычные конструкции в языке есть — условный оператор if, циклы for и while, функции, классы, модули, пакеты (иерархические совокупности модулей). Нет цикла do-while и оператора case.

Из менее традиционных операторов — возбуждение исключений raise и их перехват try-except-else и try-finally. Впрочем, исключения начинают занимать свое место и в других современных языках, так что чем-то революционным их назвать нельзя.

Для многих становится неожиданным, что в Питоне блочная структура обозначается отступами, а не словами begin/end (или скобками). К этому, однако, быстро привыкаешь, и это становится очень удобно.

Базовые типы данных

Для языка Python создано несколько интерпретаторов. В дальнейшем я буду говорить про основной интерпретатор CPython (интерпретатор, написанный на C).

В этом интерпретаторе базовые (встроенные) типы данных — целое, длинное целое, вещественное, комплексное числа, строки, списки, кортежи и словари.

Целое в Питоне соответствует типу long того компилятора C, которым скомпилирован интерпретатор.

Python — основные концепции

Python- объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход. Python поддерживает множественное наследование, переопределение инфиксных операторов, причем можно переопределить операцию как для левого операнда, так и для правого; в версии 2.1 есть полное переопределение операторов сравнения (механизм rich comparison для объектов, поддерживающих частичное упорядочивание, например, матриц).

В Python имеются исключения и механизм их перехвата; таким образом программист может построить правильную обработку ошибок и создать надежную программу. Встроенные механизмы интроспекции позволяют опрашивать интерфейсы объектов во время выполнения программы. Например, можно узнать количество и имена параметров функции; эту интроспекцию использует Zope, чтобы подготовить правильный список параметров функции при вызове ее из web.

Из современных языков Python можно сравнить в первую очередь с Java и Perl. Python выполняет все обещания, которые дала, но не выполнила Java. Python очень хорошо переносим. Он работает на всех платформах, на которых есть Java, и еще на многих. Мало найдется таких платформ, на которые Python не перенесен. Я не говорю про UNIX и Windows, конечно — с точки зрения переносимости куда интереснее такие платформы как Mac, Amiga, Palm, RiscOS, AS/400 и многие другие. Для особых любителей Java есть Jython. Он состоит из двух частей: во-первых, это интерпретатор Pyhon, написанный на Java, а во-вторых это компилятор Python в байт-код Java. В сравнении с Perl — Python как язык ему совершенно равномощен, но избавлен от великого множества неприятностей и неудобств, присущих Perl. Python обладает богатой стандартной библиотекой, плюс великим множеством модулей, доступных в Интернете. Для пользователей Windows есть пакет win32, из которого доступны практически все функции Windows API, DDE, COM.

Python — основные концепции

Автор: Олег Бройтман
Жанр: Программирование

Python — объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.

Python — объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход. Python поддерживает множественное наследование, переопределение инфиксных операторов, причем можно переопределить операцию как для левого операнда, так и для правого; в версии 2.1 есть полное переопределение операторов сравнения (механизм rich comparison для объектов, поддерживающих частичное упорядочивание, например, матриц).

Python — основные концепции скачать fb2, epub бесплатно

Python — объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.

Python — объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.

Unified system for program documentation. Indexing of programs and program documents

Демонстрационная программа – 161 KB

Исходные тексты – 39 KB

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

На таких сайтах как CodeGuru, есть несколько неплохих примеров применения виртуальных списков. Однако, многие программисты, с которыми мне приходится сталкиваться, лишь изредка прибегают к этой технике, ошибочно считая, что это если не извращение, то уж по крайней мере излишество. Многие заблуждаются, считая, что применение виртуальных списков необходимо только лишь в случаях больших массивов данных, например, при отображении информации из баз данных. Конечно это справедливо, однако, о чем действительно часто забывают – применение виртуальных списков позволяет не только повысить производительность, но и обеспечивает разделение данных и их представлений. Последнее, на мой взгляд, не менее важно.

Python — основные концепции, стр. 1

Python — объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход. Python поддерживает множественное наследование, переопределение инфиксных операторов, причем можно переопределить операцию как для левого операнда, так и для правого; в версии 2.1 есть полное переопределение операторов сравнения (механизм rich comparison для объектов, поддерживающих частичное упорядочивание, например, матриц).

В Python имеются исключения и механизм их перехвата; таким образом программист может построить правильную обработку ошибок и создать надежную программу. Встроенные механизмы интроспекции позволяют опрашивать интерфейсы объектов во время выполнения программы. Например, можно узнать количество и имена параметров функции; эту интроспекцию использует Zope, чтобы подготовить правильный список параметров функции при вызове ее из web.

Из современных языков Python можно сравнить в первую очередь с Java и Perl. Python выполняет все обещания, которые дала, но не выполнила Java. Python очень хорошо переносим. Он работает на всех платформах, на которых есть Java, и еще на многих. Мало найдется таких платформ, на которые Python не перенесен. Я не говорю про UNIX и Windows, конечно — с точки зрения переносимости куда интереснее такие платформы как Mac, Amiga, Palm, RiscOS, AS/400 и многие другие. Для особых любителей Java есть Jython. Он состоит из двух частей: во-первых, это интерпретатор Pyhon, написанный на Java, а во-вторых это компилятор Python в байт-код Java. В сравнении с Perl — Python как язык ему совершенно равномощен, но избавлен от великого множества неприятностей и неудобств, присущих Perl. Python обладает богатой стандартной библиотекой, плюс великим множеством модулей, доступных в Интернете. Для пользователей Windows есть пакет win32, из которого доступны практически все функции Windows API, DDE, COM.

Базовые типы данных

Базовые типы данных

Для языка Python создано несколько интерпретаторов. В дальнейшем я буду говорить про основной интерпретатор CPython (интерпретатор, написанный на C).

В этом интерпретаторе базовые (встроенные) типы данных — целое, длинное целое, вещественное, комплексное числа, строки, списки, кортежи и словари.

Целое в Питоне соответствует типу long того компилятора C, которым скомпилирован интерпретатор. Длинное целое — это целое число потенциально бесконечной длины; с помощью таких чисел можно производить вычисления неограниченной разрядности; длинные целые эмулируются библиотекой, встроенной в интерпретатор. Вещественное соответствует типу double. Комплексные числа — это пара вещественных, записываемых в инженерной (а не математической) нотации: 21 + 12j.

Мастер Йода рекомендует:  Как написать свой Тетрис на Java за полчаса

Строки — просто последовательности символов. Строки бывают ASCII и Unicode, их можно перекодировать друг в друга. ASCII-строки можно также перекодировать в другую кодировку (например, koi8 win1251)

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

Словари (ассоциативные массивы) — это отображения (mapping), сопоставляющие уникальному ключу произвольный объект. Ключом словаря может быть любой неизменяемый объект.

Похожие главы из других книг

Типы данных

Базовые типы данных

Базовые типы данных Для языка Python создано несколько интерпретаторов. В дальнейшем я буду говорить про основной интерпретатор CPython (интерпретатор, написанный на C).В этом интерпретаторе базовые (встроенные) типы данных — целое, длинное целое, вещественное, комплексное

Глава 2 Ввод данных. Типы, или форматы, данных

Глава 2 Ввод данных. Типы, или форматы, данных Работа с документами Excel сопряжена с вводом и обработкой различных данных, то есть ин формации, которая может быть текстовой, числовой, финансовой, статистической и т. д. МУЛЬТИМЕДИЙНЫЙ КУРС Методы ввода и обработки данных

Типы данных

Типы данных Один из этапов проектирования базы данных заключается в объявлении типа каждого поля, что позволяет процессору базы данных эффективно сохранять и извлекать данные. В SQL Server предусмотрено использование 21 типа данных, которые перечислены в табл. 1.1.Таблица 1.1.

12.2. Типы баз данных

12.2. Типы баз данных Группу связанных между собой элементов данных называют обычно записью. Известны три основных типа организации данных и связей между ними: иерархический (в виде дерева), сетевой и реляционный.Иерархическая БДВ иерархической БД существует

Типы данных

Типы данных В JScript поддерживаются шесть типов данных, главными из которых являются числа, строки, объекты и логические данные. Оставшиеся два типа — это null (пустой тип) и undefined (неопределенный

Типы данных

Типы данных Приведенные в этой главе таблицы взяты непосредственно из оперативной справочной системы и представляют единую модель данных Windows (Windows Uniform Data Model). Определения типов можно найти в заголовочном файле BASETSD.H, входящем в состав интегрированной среды разработки

14.5.1 Типы данных

14.5.1 Типы данных Файл может содержать текст ASCII, EBCDIC или двоичный образ данных (существует еще тип, называемый локальным или логическим байтом и применяемый для компьютеров с размером байта в 11 бит). Текстовый файл может содержать обычный текст или текст, форматированный

20.10.3 Типы данных MIB

20.10.3 Типы данных MIB Причиной широкого распространения SNMP стало то, что проектировщики придерживались правила «Будь проще!»? Все данные MIB состоят из простых скалярных переменных, хотя отдельные части MIB могут быть логически организованы в таблицы.? Только небольшое число

Типы данных

Типы данных Многие языки программирования при объявлении переменной требуют указывать, какой тип данных будет ей присваиваться. Например, в языке Java кодint i = 15;объявит переменную целого типа int с именем i и присвоит ей значение 15. В этом случае тип данных ставится в

Базовые типы данных

Базовые типы данных В языке Си реализован набор типов данных, называемых «базовыми» типами. Спецификации этих типов перечислены в таблице 3.1.Таблица 3.1. Базовые типы Спецификация типов Целые signed char знаковый символьный signed int знаковый целый signed short int знаковый

Базовые типы и указатели

Базовые типы и указатели Синтаксис:= Значение выражения присваивается переменной. При необходимости выполняются правила преобразования типов.Примеры:int х = 10, у = 20; /* пример 1 */register int *рх = 0; /* пример 2 */int с = (3*1024); /* пример 3 */int *b = &x; /* пример 4 */В первом примере

5.2.4. Типы данных

5.2.4. Типы данных Мы можем вводить в ячейки следующие данные: текст, числа, даты, также приложение Numbers предоставляет возможность добавлять флажки, ползунки и другие элементы управления. Аналогично MS Excel для выравнивания чисел, дат и текстовых данных в Numbers существуют

Типы данных

Типы данных Несмотря на то, что типы данных подробно описаны в документации (см. [1, гл. 4]), необходимо рассмотреть ряд понятий, которые будут часто использоваться в последующих главах книги. Помимо изложения сведений общего характера будут рассмотрены также примеры

10.1. Теория¶

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

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

10.1.1. Введение ООП¶

10.1.1.1. Проблемы процедурного подхода¶

Написание программы в процедурном стиле в определенный момент приводит к ряду трудноразрешимых проблем.

Предположим, в программе необходимо реализовать работу с некоторым числом окружностей. Минимальные данные, необходимые для создания отдельной окружности, — это координаты ее центра x и y , а также радиус r .

Одним из простых решений является выбор какой-либо структуры данных, например, списка:

Данное решение имеет 3 недостатка:

Неочевидность назначения каждого элемента списка.

Разработчик может подразумевать [x, у, r] или [r, x, y] , кроме того, для обращения к параметру окружности необходимо точно знать его индекс.

«Сгладить» данную проблему могут помочь именованые константы или использование словаря (Листинг 10.1.1 (а) и (б) соответственно).

Отсутствие контроля за значениями.

Даже ликвидация первого недостатка не помешает выполнить, например,

чего не должно быть в принципе.

Такая невозможность выполнить встроенную проверку данных является, возможно, самым негативным аспектом исключительно процедурного подхода.

Малая эффективность использования существующего кода.

Третья проблема возникает в случае, когда встает необходимость одновременно работать не только с окружностями, но и с другими геометрическими фигурами (в т.ч. одним и тем же образом).

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

Для комплексного решения указанных проблем необходим способ, который позволил бы:

  • логически «упаковать» данные, предоставив удобный интерфейс доступа (не привязанный к конкретной структуре данных);
  • ограничить круг данных и операций, которые могли бы быть изменены;
  • повторно использовать написанный код при необходимости.

Это может быть достигнуто путем создания собственного объекта (типа данных) Окружность , используя объектно-ориентированный стиль программирования.

10.1.1.2. Основные понятия и терминология¶

10.1.1.2.1. Объект и черный ящик¶

Объект — любой материальный предмет, который можно встретить в повседневной жизни: дом, телефон, машина, книга и т.д.

Применительно к программированию, объектом можно считать любое нечто, которое можно представить в программе в виде одного элемента, который имеет какие-либо характеристики и умеет что-либо делать. Это позволяет разделять программу (большую и не очень) на связанные, более мелкие элементы, логически взаимодействующие между собой так, как бы они взаимодействовали и в реальной жизни. Данная идея берет свое начало от концепции черного ящика (Рисунок 10.1.1).

Рисунок 10.1.1 — Модель черного ящика

Черный ящик рассматривается как система, принимающая некую «входную информацию» (данные) и возвращающая «выходную информацию» (результаты работы), при этом происходящие в ходе работы системы процессы наблюдателю неизвестны.

В качестве примера такой системы можно рассмотреть планшетный компьютер. Не являясь специалистом, ответить на вопросы «что находится внутри?» или «как оно работает?» практически невозможно. При этом известно, что нажатие на определенные участки экрана («входная информация») позволит запустить приложение, установить будильник на завтрашнее утро и т.д. («выходная информация»). Более того, можно приобрести новый планшет, и, несмотря на то, что его «начинка» может существенно отличаться, скорее всего проблем с его использованием не возникнет, т.к. аналогичные функции являются стандартными для любых планшетов. Так концепция «черного ящика» разделяет понятия «что объект делает?» и «как он это делает?», предоставляя необходимый уровень детализации для изучения и использования объекта.

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

Плюсы данного подхода заключаются в том, что декомпозиция позволяет:

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

Объектно-ориентированное программирование (ООП) — парадигма программирования, предусматривающая написание программ в рамках объектно-ориентированного подхода.

10.1.1.2.2. Класс и объект, поля и методы¶

В ООП центральными являются понятия класса и объекта:

  1. Класс (англ. Class): абстракция реального мира (обобщенный шаблон), специальный тип данных; класс описывает свойства и методы, которые могут быть доступны у подобных объектов;
  2. Объект (англ. Object) (экземпляр класса, англ. Class Instance): частный случай класса.


Пример разницы между классом и объектом приведена на Рисунке 10.1.2.

Рисунок 10.1.2 — Соотношение класса ( Car ) и конкретных объектов [6]

Каждый класс содержит и описывает поля и методы (Рисунок 10.1.3):

  1. Поле (англ. Data Member / Variable / Field): переменная, привязанная к классу;
  2. Метод (англ. Method): действие (функция), которую можно проводить над классом.

Рисунок 10.1.3 — Примеры классов с данными и методами [7]

Набор полей и методов определяет интерфейс класса — способ взаимодействия с классом произвольного кода программы. Доступ к полям и методам осуществляется через указание объекта, например, в Python, используя точку:

Типичный сценарий написания объектно-ориентированной программы:

  1. Создание одного или нескольких классов (или поиск подходящих существующих).
  2. Создание произвольного количества экземпляров классов (инстанцирование) — объектов.
  3. Изменение полей и вызов методов созданных объектов.

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

Как поля так и методы могут иметь разный уровень доступа — область видимости (англ. Scope) (Таблица 10.1.1).

Таблица 10.1.1 — Область видимости полей и методов ¶

Уровень доступа (тип) Доступность
Внутри самого класса Внутри классов-наследников Извне (любой код)
Закрытый / приватный (англ. Private) Да Нет Нет
Защищенный (англ. Protected) Да Да Нет
Открытый / публичный (англ. Public) Да Да Да

Хорошо спроектированный класс грамотно определяет уровни доступа к своим полям и методам.

Еще одним понятием, относящимся к классу, является виртуальность метода. Если метод объявлен как виртуальный — он может быть переопределен (изменено поведение метода) в классах-наследниках.

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

10.1.1.3. Принципы ООП¶

Объектно-ориентированная парадигма программирования включает 3 основных принципа (свойства):

Как язык скрывает детали внутренней реализации объектов и предохраняет целостность данных?

Как язык стимулирует многократное использование кода?

Как язык позволяет трактовать связанные объекты сходным образом?

10.1.1.3.1. Инкапсуляция¶

За счет принципа инкапсуляции язык может скрывать некоторые детали реализации от пользователя объекта (Листинг 10.1.2).

Класс DatabaseReader инкапсулирует внутренние детали нахождения, загрузки, манипуляций и закрытия файла данных. Нет необходимости беспокоиться о многочисленных строках кода, которые работают «за кулисами», чтобы использовать класс в своем приложении. Все, что потребуется — это создать экземпляр класса и отправить ему соответствующие сообщения (например, “открыть файл по имени Balance.sqlite , расположенный на диске С:\ ”).

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

10.1.1.3.2. Наследование¶

Наследование — аспект ООП, облегчающий повторное использование кода. Принцип наследования встречается в повседневной жизни — мы группируем объекты по какому-то признаку (форме, дизайну и т.д.).

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

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

На Рисунке 10.1.4. приведен пример иерархии наследуемых классов.

Рисунок 10.1.4 — Пример иерархии наследуемых классов [8]

Прочесть диаграмму можно следующим образом:

  • классы Прямоугольник ( Rectangle ) и Окружность ( Circle ) являются Фигурой ( Shape ) (дочерними классами);
  • фигура ( Shape ) имеет следующие характеристики (и ими обладают все дочерние классы!): поля — цвет, толщина линии и методы — отрисовка(), очистка();
  • дочерние классы имеют дополнительные характеристики (расширяя унаследованный класс Фигура): например, Rectangle — координаты верхнего левого и нижнего правого углов, а Circle — радиус.

При наличии классов, связанных этой формой наследования, между типами устанавливается отношение “является”.

10.1.1.3.3. Полиморфизм¶

Полиморфизм обозначает способность языка трактовать связанные объекты в сходной манере. В частности, этот принцип ООП позволяет базовому классу определять набор членов, которые доступны всем наследникам.

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

На Рисунке 10.1.5 приведена иерархия классов с общим методом draw() .

Рисунок 10.1.5 — Иерархия классов с общим методом draw() [8]

В классе Shape определен метод draw() , отвечающий за отрисовку фигуры. Учитывая, что каждая фигура должна рисовать себя уникальным образом, подклассы (такие как Rectangle и Circle ) должны реализовать этот метод по своему усмотрению так, что вызов draw() на объекте Circle приведет к рисованию круга, а вызов draw() на объекте Rectangle — к рисованию прямоугольника.

Объект Controller содержит список фигур ShapesList , в котором могут содержаться как прямоугольники, так и окружности. Реализовать метод отрисовки всех фигур drawAllShapes() можно 2 способами: в процедурном стиле (Листинг 10.1.3 (а)) и объектно-ориентированном (Листинг 10.1.3 (б)).

Python — основные концепции

Бройтман Олег

Python — объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.

— объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход. Python поддерживает множественное наследование, переопределение инфиксных операторов, причем можно переопределить операцию как для левого операнда, так и для правого; в версии 2.1 есть полное переопределение операторов сравнения (механизм rich comparison для объектов, поддерживающих частичное упорядочивание, например, матриц).

В Python имеются исключения и механизм их перехвата; таким образом программист может построить правильную обработку ошибок и создать надежную программу. Встроенные механизмы интроспекции позволяют опрашивать интерфейсы объектов во время выполнения программы. Например, можно узнать количество и имена параметров функции; эту интроспекцию использует Zope, чтобы подготовить правильный список параметров функции при вызове ее из web.

Из современных языков Python можно сравнить в первую очередь с Java и Perl. Python выполняет все обещания, которые дала, но не выполнила Java. Python очень хорошо переносим. Он работает на всех платформах, на которых есть Java, и еще на многих. Мало найдется таких платформ, на которые Python не перенесен. Я не говорю про UNIX и Windows, конечно — с точки зрения переносимости куда интереснее такие платформы как Mac, Amiga, Palm, RiscOS, AS/400 и многие другие. Для особых любителей Java есть Jython. Он состоит из двух частей: во-первых, это интерпретатор Pyhon, написанный на Java, а во-вторых это компилятор Python в байт-код Java. В сравнении с Perl — Python как язык ему совершенно равномощен, но избавлен от великого множества неприятностей и неудобств, присущих Perl. Python обладает богатой стандартной библиотекой, плюс великим множеством модулей, доступных в Интернете. Для пользователей Windows есть пакет win32, из которого доступны практически все функции Windows API, DDE, COM.

Существует Русскоязычная Группа Пользователей Python и Zope. Сайт группы расположен по адресу . На список рассылки можно подписаться, послав по адресу письмо с телом subscribe python.

Основные структуры управления

Python — вполне обычный, можно сказать, «традиционный» язык программирования. Все привычные конструкции в языке есть — условный оператор if, циклы for и while, функции, классы, модули, пакеты (иерархические совокупности модулей). Нет цикла do-while и оператора case.

Из менее традиционных операторов — возбуждение исключений raise и их перехват try-except-else и try-finally. Впрочем, исключения начинают занимать свое место и в других современных языках, так что чем-то революционным их назвать нельзя.

Для многих становится неожиданным, что в Питоне блочная структура обозначается отступами, а не словами begin/end (или скобками). К этому, однако, быстро привыкаешь, и это становится очень удобно.

Базовые типы данных

Для языка Python создано несколько интерпретаторов. В дальнейшем я буду говорить про основной интерпретатор CPython (интерпретатор, написанный на C).

В этом интерпретаторе базовые (встроенные) типы данных — целое, длинное целое, вещественное, комплексное числа, строки, списки, кортежи и словари.

Целое в Питоне соответствует типу long того компилятора C, которым скомпилирован интерпретатор. Длинное целое — это целое число потенциально бесконечной длины; с помощью таких чисел можно производить вычисления неограниченной разрядности; длинные целые эмулируются библиотекой, встроенной в интерпретатор. Вещественное соответствует типу double. Комплексные числа — это пара вещественных, записываемых в инженерной (а не математической) нотации: 21 + 12j.

Строки — просто последовательности символов. Строки бывают ASCII и Unicode, их можно перекодировать друг в друга. ASCII-строки можно также перекодировать в другую кодировку (например, koi8 win1251)

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

Словари (ассоциативные массивы) — это отображения (mapping), сопоставляющие уникальному ключу произвольный объект. Ключом словаря может быть любой неизменяемый объект.

Изменяемые и неизменяемые объекты; адресная арифметика и ссылки

Объекты в Питоне бывают двух разновидностей — изменяемые и неизменяемые. Списки, например — объекты изменяемые, их содержимое и длину можно менять. Поскольку ключами словарей могут быть только неизменяемые объекты, в Питоне есть специальный тип неизменяемых списков — кортежи. Числа, естественно, объекты неизменяемые. Также неизменяемыми являются строки, в отличии от многих других языков программирования. Хотя классы, написанные программистами, порождают изменяемые объекты, у программиста есть возможность написать класс, экземпляры которого могут быть ключами словаря.

Адресной арифметики в Питоне нет. Вообще. Поэтому разименовать нулевой указатель просто невозможно. Ссылки (указатели) в Питоне есть, но манипулирование ими осуществляется прозрачно для программиста. В действительности все переменные в Питоне являются ссылками на объекты; поэтому, например, запись a = b означает «в переменную a скопировать ссылку из переменной b». Также списки и словари хранят не объекты, а ссылки на объекты. Присваивание и разыменование ссылок производится автоматически.

Каждый объект в Питоне хранит счетчик ссылок, и при таком копировании ссылки этот счетчик увеличивается. Счетчик же ссылок того объекта, на который переменная a указывала раньше — уменьшается. Когда счетчик достигает 0, объект считается неиспользуемым, для него вызывается деструктор (если это экземпляр класса с деструктором), и память объекта освобождается.

Такой механизм называется «синхронной сборкой мусора со счетчиком ссылок». Помимо него, в Питоне есть асинхронный сборщик мусора, достоинство которого в том, что он умеет распознавать циклические ссылки и очищать объекты, на которые нет других ссылок (не из цикла). (Пример циклических ссылок: l=[]; l.append(l))

Рассмотрим поподробнее питоновские ссылки. Создадим список и присвоим его (на самом деле присвоим ссылку на него) в переменную a: a = [21, 12, «str»]. Теперь присвоим ссылку из a в переменную b: a = b. Изменим список, на который ссылается a, скажем, добавим в него содержимое другого списка: a += [2000]. На какой список ссылается переменная b? На тот же, что и a — на список из 4 элементов. Происходит это потому, что b все еще хранит ссылку на тот же список, что и a. А теперь присвоим в a новый список: a = [12, 21]. Что теперь будет в b? А все тот же список из 4 элементов. Присваивание в a разорвало связь между a и b. В переменной a теперь ссылка на новый список, а в переменной b все та же ссылка на тот же список.

Если a — переменная, хранящая ссылку на список, и присваивание b = a копирует только ссылку на тот же список, то можно ли скопировать сам список? Короткий ответ — да, можно. Но не все так просто. Ведь и сам список хранит не объекты, а ссылки на объекты. Должны ли копироваться эти ссылки или должны быть продублированы и сами объекты? Питон дает два ответа на этот вопрос: можно сделать и так, и эдак. Первый вариант копирования называется «поверхностным», второй — «глубоким» копированием. Глубокое копирование учитывает циклические ссылки. Классы, написанные программистом, могут определять методы, участвующие в копировании, тем самым «помогая» процессу копирования, для того чтобы не включать в копирование лишней информации.

Манипуляции с неизменяемыми объектами осуществляются путем создания новых объектов. Например, если в строке надо заменить символ, исходная строка разбивается на две подстроки, и из них (плюс новый символ) создается новая строка. Если в переменной a ссылка на цело число, то в результате операции a += 1 в a окажется ссылка на новое число.

Лови Книгу .ру

Огромная коллекция книг в открытом доступе

Python — основные концепции

Python- объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход. Python поддерживает множественное наследование, переопределение инфиксных операторов, причем можно переопределить операцию как для левого операнда, так и для правого; в версии 2.1 есть полное переопределение операторов сравнения (механизм rich comparison для объектов, поддерживающих частичное упорядочивание, например, матриц).

В Python имеются исключения и механизм их перехвата; таким образом программист может построить правильную обработку ошибок и создать надежную программу. Встроенные механизмы интроспекции позволяют опрашивать интерфейсы объектов во время выполнения программы. Например, можно узнать количество и имена параметров функции; эту интроспекцию использует Zope, чтобы подготовить правильный список параметров функции при вызове ее из web.

Из современных языков Python можно сравнить в первую очередь с Java и Perl. Python выполняет все обещания, которые дала, но не выполнила Java. Python очень хорошо переносим. Он работает на всех платформах, на которых есть Java, и еще на многих. Мало найдется таких платформ, на которые Python не перенесен. Я не говорю про UNIX и Windows, конечно — с точки зрения переносимости куда интереснее такие платформы как Mac, Amiga, Palm, RiscOS, AS/400 и многие другие. Для особых любителей Java есть Jython. Он состоит из двух частей: во-первых, это интерпретатор Pyhon, написанный на Java, а во-вторых это компилятор Python в байт-код Java. В сравнении с Perl — Python как язык ему совершенно равномощен, но избавлен от великого множества неприятностей и неудобств, присущих Perl. Python обладает богатой стандартной библиотекой, плюс великим множеством модулей, доступных в Интернете. Для пользователей Windows есть пакет win32, из которого

Бройтман Олег — Python — основные концепции (СИ)

Тут можно читать онлайн книгу Бройтман Олег — Python — основные концепции (СИ) — бесплатно полную версию (целиком). Жанр книги: Программирование. Вы можете прочесть полную версию (весь текст) онлайн без регистрации и смс на сайте Lib-King.Ru (Либ-Кинг) или прочитать краткое содержание, аннотацию (предисловие), описание и ознакомиться с отзывами (комментариями) о произведении.

Python — основные концепции (СИ) краткое содержание

Python — основные концепции (СИ) — описание и краткое содержание, автор Бройтман Олег, читать бесплатно онлайн на сайте электронной библиотеки Lib-King.Ru.

Python — объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.

Python — основные концепции (СИ) — читать онлайн бесплатно полную версию (весь текст целиком)

Python — основные концепции (СИ) — читать книгу онлайн бесплатно, автор Бройтман Олег

Python — объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход. Python поддерживает множественное наследование, переопределение инфиксных операторов, причем можно переопределить операцию как для левого операнда, так и для правого; в версии 2.1 есть полное переопределение операторов сравнения (механизм rich comparison для объектов, поддерживающих частичное упорядочивание, например, матриц).

В Python имеются исключения и механизм их перехвата; таким образом программист может построить правильную обработку ошибок и создать надежную программу. Встроенные механизмы интроспекции позволяют опрашивать интерфейсы объектов во время выполнения программы. Например, можно узнать количество и имена параметров функции; эту интроспекцию использует Zope, чтобы подготовить правильный список параметров функции при вызове ее из web.

Из современных языков Python можно сравнить в первую очередь с Java и Perl. Python выполняет все обещания, которые дала, но не выполнила Java. Python очень хорошо переносим. Он работает на всех платформах, на которых есть Java, и еще на многих. Мало найдется таких платформ, на которые Python не перенесен. Я не говорю про UNIX и Windows, конечно — с точки зрения переносимости куда интереснее такие платформы как Mac, Amiga, Palm, RiscOS, AS/400 и многие другие. Для особых любителей Java есть Jython. Он состоит из двух частей: во-первых, это интерпретатор Pyhon, написанный на Java, а во-вторых это компилятор Python в байт-код Java. В сравнении с Perl — Python как язык ему совершенно равномощен, но избавлен от великого множества неприятностей и неудобств, присущих Perl. Python обладает богатой стандартной библиотекой, плюс великим множеством модулей, доступных в Интернете. Для пользователей Windows есть пакет win32, из которого доступны практически все функции Windows API, DDE, COM.

Python — основные концепции (fb2)

Python — основные концепции [Олег Бройтман ]

Python — объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход. Python поддерживает множественное наследование, переопределение инфиксных операторов, причем можно переопределить операцию как для левого операнда, так и для правого; в версии 2.1 есть полное переопределение операторов сравнения (механизм rich comparison для объектов, поддерживающих частичное упорядочивание, например, матриц).

В Python имеются исключения и механизм их перехвата; таким образом программист может построить правильную обработку ошибок и создать надежную программу. Встроенные механизмы интроспекции позволяют опрашивать интерфейсы объектов во время выполнения программы. Например, можно узнать количество и имена параметров функции; эту интроспекцию использует Zope, чтобы подготовить правильный список параметров функции при вызове ее из web.

Из современных языков Python можно сравнить в первую очередь с Java и Perl. Python выполняет все обещания, которые дала, но не выполнила Java. Python очень хорошо переносим. Он работает на всех платформах, на которых есть Java, и еще на многих. Мало найдется таких платформ, на которые Python не перенесен. Я не говорю про UNIX и Windows, конечно — с точки зрения переносимости куда интереснее такие платформы как Mac, Amiga, Palm, RiscOS, AS/400 и многие другие. Для особых любителей Java есть Jython. Он состоит из двух частей: во-первых, это интерпретатор Pyhon, написанный на Java, а во-вторых это компилятор Python в байт-код Java. В сравнении с Perl — Python как язык ему совершенно равномощен, но избавлен от великого множества неприятностей и неудобств, присущих Perl. Python обладает богатой стандартной библиотекой, плюс великим множеством модулей, доступных в Интернете. Для пользователей Windows есть пакет win32, из которого доступны практически все функции Windows API, DDE, COM.

Существует Русскоязычная Группа Пользователей Python и Zope. Сайт группы расположен по адресу http://zope.net.ru/ . На список рассылки можно подписаться, послав по адресу mailto:majordomo@list.glas.net?body=subscribe+python письмо с телом subscribe python.

Основные структуры управления

Python — вполне обычный, можно сказать, «традиционный» язык программирования. Все привычные конструкции в языке есть — условный оператор if, циклы for и while, функции, классы, модули, пакеты (иерархические совокупности модулей). Нет цикла do-while и оператора case.

Из менее традиционных операторов — возбуждение исключений raise и их перехват try-except-else и try-finally. Впрочем, исключения начинают занимать свое место и в других современных языках, так что чем-то революционным их назвать нельзя.

Для многих становится неожиданным, что в Питоне блочная структура обозначается отступами, а не словами begin/end (или скобками). К этому, однако, быстро привыкаешь, и это становится очень удобно.

Базовые типы данных

Для языка Python создано несколько интерпретаторов. В дальнейшем я буду говорить про основной интерпретатор CPython (интерпретатор, написанный на C).

В этом интерпретаторе базовые (встроенные) типы данных — целое, длинное целое, вещественное, комплексное числа, строки, списки, кортежи и словари.

Целое в Питоне соответствует типу long того компилятора C, которым скомпилирован интерпретатор. Длинное целое — это целое число потенциально бесконечной длины; с помощью таких чисел можно производить вычисления неограниченной разрядности; длинные целые эмулируются библиотекой, встроенной в интерпретатор. Вещественное соответствует типу double. Комплексные числа — это пара вещественных, записываемых в инженерной (а не математической) нотации: 21 + 12j.

Строки — просто последовательности символов. Строки бывают ASCII и Unicode, их можно перекодировать друг в друга. ASCII-строки можно также перекодировать в другую кодировку (например, koi8 win1251)

Словари (ассоциативные массивы) — это отображения (mapping), сопоставляющие уникальному ключу произвольный объект. Ключом словаря может быть любой неизменяемый объект.

Изменяемые и неизменяемые объекты; адресная арифметика и ссылки

Объекты в Питоне бывают двух разновидностей — изменяемые и неизменяемые. Списки, например — объекты изменяемые, их содержимое и длину можно менять. Поскольку ключами словарей могут быть только неизменяемые объекты, в Питоне есть специальный тип неизменяемых списков — кортежи. Числа, естественно, объекты неизменяемые. Также неизменяемыми являются строки, в отличии от многих других языков программирования. Хотя классы, написанные программистами, порождают изменяемые объекты, у программиста есть возможность написать класс, экземпляры которого могут быть ключами словаря.

Адресной арифметики в Питоне нет. Вообще. Поэтому разименовать нулевой указатель просто невозможно. Ссылки (указатели) в Питоне есть, но манипулирование ими осуществляется прозрачно для программиста. В действительности все переменные в Питоне являются ссылками на объекты; поэтому, например, запись a = b означает «в переменную a скопировать ссылку из переменной b«. Также списки и словари хранят не объекты, а ссылки на объекты. Присваивание и разыменование ссылок производится автоматически.

Каждый объект в Питоне хранит счетчик ссылок, и при таком копировании ссылки этот счетчик увеличивается. Счетчик же ссылок того объекта, на который переменная a указывала раньше — уменьшается. Когда счетчик достигает 0, объект считается неиспользуемым, для него вызывается деструктор (если это экземпляр класса с деструктором), и память объекта освобождается.

Такой механизм называется «синхронной сборкой мусора со счетчиком ссылок». Помимо него, в Питоне есть асинхронный сборщик мусора, достоинство которого в том, что он умеет распознавать циклические ссылки и очищать объекты, на которые нет других ссылок (не из цикла). (Пример циклических ссылок: l=[]; l.append(l))

Рассмотрим поподробнее питоновские ссылки. Создадим список и присвоим его (на самом деле присвоим ссылку на него) в переменную a: a = [21, 12, «str»]. Теперь присвоим ссылку из a в переменную b: a = b. Изменим список, на который ссылается a, скажем, добавим в него содержимое другого списка: a += [2000]. На какой список ссылается переменная b? На тот же, что и a — на список из 4 элементов. Происходит это потому, что b все еще хранит ссылку на тот же список, что и a. А теперь присвоим в a новый список: a = [12, 21]. Что теперь будет в b? А все тот же список из 4 элементов. Присваивание в a разорвало связь между a и b. В переменной a теперь ссылка на новый список, а в переменной b все та же ссылка на тот же список.

Если a — переменная, хранящая ссылку на список, и присваивание b = a копирует только ссылку на тот же список, то можно ли скопировать сам список? Короткий ответ — да, можно. Но не все так просто. Ведь и сам список хранит не объекты, а ссылки на объекты. Должны ли копироваться эти ссылки или должны быть продублированы и сами объекты? Питон дает два ответа на этот вопрос: можно сделать и так, и эдак. Первый вариант копирования называется «поверхностным», второй — «глубоким» копированием. Глубокое копирование учитывает циклические ссылки. Классы, написанные программистом, могут определять методы, участвующие в копировании, тем самым «помогая» процессу копирования, для того чтобы не включать в копирование лишней информации.

Манипуляции с неизменяемыми объектами осуществляются путем создания новых объектов. Например, если в строке надо заменить символ, исходная строка разбивается на две подстроки, и из них (плюс новый символ) создается новая строка. Если в переменной a ссылка на цело число, то в результате операции a += 1 в a окажется ссылка на новое число.

Мастер Йода рекомендует:  REST API для взаимодействия сервисов
Добавить комментарий