Читаем Питон - модули, пакеты, классы, экземпляры. полностью

Питон - модули, пакеты, классы, экземпляры.

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

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

Программирование / Книги по IT18+
<p>Питон - модули, пакеты, классы, экземпляры.</p><p><strong>[</strong><a l:href="mailto:alv@newmail.ru" type="note">Олег Бройтман</a><strong>]</strong></p><p>Модули - структурирование пространства имен</p>

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

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

Модуль - это совокупность описаний, объединенных в общее пространство имен - глобальное пространство модуля. Модули подключаются к программе (или другому модулю) с помощью оператора import, после которого имена из пространства имен модуля становятся доступными. Какие именно имена становятся доступны, определяет оператор import: вариант import module делает доступным ровно одно имя - имя модуля module, но зато через это имя можно использовать все глобальные имена модуля в виде module.name. В варианте from module import name из модуля импортируется указанное имя или список имен. В варианте from module import * из модуля импортируются все имена. Хотя автор модуля может ограничить этот список, а в отсутствии такого ограничения не импортируются имена, начинающиеся с подчеркивания - считается, что это внутренние имена модуля, не входящие в его публичный интерфейс.

Модуль может быть написан на Python, C или C++. Модули, написанные на Питоне, позволяют создавать новые классы (об объектно-ориентированном программировании речь будет идти ниже). Модули написанные на C и C++ позволяют создавать новые типы данных. Модули, написанные на C/C++ могут быть встроенные (builtin) или подгружаемые (DLL в Windows, разделяемые библиотеки в тех вариантах UNIX, в которых формат выполняемых файлов ELF).

Модуль на Питоне - это текстовый файл с расширением .py, содержащий описания переменных, функций и классов, плюс выполняемый код, который позволяет инициализировать модуль. Этот код выполняется при первом импорте модуля, после чего интерпретатор запоминает, что модуль уже проимпортирован и проинициализирован, и при последующих импортах этого же модуля код инициализации не выполняется.

Модули можно объединять в древовидные иерархии. Например, пакет XML содержит в себе пакеты DOM, SAX, Parsers (и другие, в зависимости от реализации). В результате можно проимпортировать PyExpat командой import xml.parsers.expat, тогда команды этого модуля будут доступны как xml.parsers.expat.ParserCreate, а можно проимпортировать его же командой from xml.parsers import expat, тогда команды этого модуля будут доступны как expat.ParserCreate. Или сразу from xml.parsers.expat import ParserCreate!

<p>Объектно-ориентированное программирование</p>

Питон - объектно-ориентированный язык со множественным наследованием. Можно сказать, что Питон поддерживает классическую ОО-модель с некоторыми особенностями. Классы в Python могут иметь статические переменные, разделяемые всеми экземплярами класса, но не могут иметь статических методов. Все методы относятся к экземплярам класса. Все методы можно переопределять в наследниках. Ссылка на объект (экземпляр класса) передается в методы в явном виде, в первом параметре. Традиционно эту переменную называют self. Какого-то общего предка всех классов (типа Object) в Python нет. Вообще в ОО-программировании в Питоне важно не кто от кого наследуется, а какой поддерживается интерфейс; наследование лишь дает реализацию. Формальных механизмов проверки интерфейсов пока нет, но возможно они будут включены в язык и библиотеки; Zope делает шаги в этом направлении.

Конструктор и деструктор класса называются __init__ и __del__ (встроенные и служебные имена в Питоне обозначаются двумя подчеркиваниями перед и после имени; это всего лишь соглашение, язык не запрещает программисту писать собственные методы с такими именами). Вернее было бы назвать эти методы initializer и finalizer - они сами не размещают и не освобождают память (это делает за них интерпретатор), они инициализируют и очищают свои переменные.

В Питоне нет отдельного оператора new для создания экземпляров класса. Для создания экземпляра класса вызывается класс с необходимыми параметрами. Эти параметры передаются в __init__. Метод __del__, конечно, вызывается без параметров (кроме, естественно, self). Для удаления объектов (и не только экземпляров классов) в Питоне есть оператор del.

Пример.

class Foo:

bar = "baz"

def __init__(self, foo):

self.foo = foo

def __del__(self):

del self.foo

foo = Foo(12)

del foo

Перейти на страницу:

Похожие книги

97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT
Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
C++
C++

С++ – это универсальный язык программирования, задуманный так, чтобы сделать программирование более приятным для серьезного программиста. За исключением второстепенных деталей С++ является надмножеством языка программирования C. Помимо возможностей, которые дает C, С++ предоставляет гибкие и эффективные средства определения новых типов. Используя определения новых типов, точно отвечающих концепциям приложения, программист может разделять разрабатываемую программу на легко поддающиеся контролю части. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. Программирование с применением таких объектов часто называют объектно-ориентированным. При правильном использовании этот метод дает более короткие, проще понимаемые и легче контролируемые программы. Ключевым понятием С++ является класс. Класс – это тип, определяемый пользователем. Классы обеспечивают сокрытие данных, гарантированную инициализацию данных, неявное преобразование типов для типов, определенных пользователем, динамическое задание типа, контролируемое пользователем управление памятью и механизмы перегрузки операций. С++ предоставляет гораздо лучшие, чем в C, средства выражения модульности программы и проверки типов. В языке есть также усовершенствования, не связанные непосредственно с классами, включающие в себя символические константы, inline-подстановку функций, параметры функции по умолчанию, перегруженные имена функций, операции управления свободной памятью и ссылочный тип. В С++ сохранены возможности языка C по работе с основными объектами аппаратного обеспечения (биты, байты, слова, адреса и т.п.). Это позволяет весьма эффективно реализовывать типы, определяемые пользователем. С++ и его стандартные библиотеки спроектированы так, чтобы обеспечивать переносимость. Имеющаяся на текущий момент реализация языка будет идти в большинстве систем, поддерживающих C. Из С++ программ можно использовать C библиотеки, и с С++ можно использовать большую часть инструментальных средств, поддерживающих программирование на C. Эта книга предназначена главным образом для того, чтобы помочь серьезным программистам изучить язык и применять его в нетривиальных проектах. В ней дано полное описание С++, много примеров и еще больше фрагментов программ.

Бьёрн Страуструп , Бьярн Страустрап , Мюррей Хилл

Программирование, программы, базы данных / Программирование / Книги по IT