Содержание....6
Предисловие....18
Часть VI. Классы и объектно-ориентированное программирование....20
ГЛАВА 26. Объектно-ориентированное программирование: общая картина....21
Для чего используются классы?....22
Объектно-ориентированное программирование с высоты птичьего полета....23
Поиск в иерархии наследования....24
Классы и экземпляры....26
Вызовы методов....26
Создание деревьев классов....27
Перегрузка операций....29
Объектно-ориентированное программирование — это многократное использование кода....30
Резюме....33
Проверьте свои знания: контрольные вопросы....33
Проверьте свои знания: ответы....34
ГЛАВА 27. Основы написания классов....35
Классы генерируют множество объектов экземпляров....35
Объекты классов обеспечивают стандартное поведение....36
Объекты экземпляров являются конкретными элементами....36
Первый пример....37
Классы настраиваются через наследование....39
Второй пример....40
Классы являются атрибутами в модулях....42
Классы могут перехватывать операции Python....43
Третий пример....44
Для чего используется перегрузка операций?....46
Простейший в мире класс Python....47
Снова о записях: классы или словари....50
Резюме....52
Проверьте свои знания: контрольные вопросы....52
Проверьте свои знания: ответы....53
ГЛАВА 28. Более реалистичный пример....55
Шаг 1: создание экземпляров....56
Написание кода конструкторов....56
Тестирование в ходе дела....57
Использование кода двумя способами....59
Шаг 2: добавление методов, реализующих поведение....60
Написание кода методов....62
Шаг 3: перегрузка операций....64
Реализация отображения....64
Шаг 4: настройка поведения за счет создания подклассов....66
Написание кода подклассов....67
Расширение методов: плохой способ....67
Расширение методов: хороший способ....68
Полиморфизм в действии....70
Наследование, настройка и расширение....71
Объектно-ориентированное программирование: основная идея....72
Шаг 5: настройка конструкторов....73
Объектно-ориентированное программирование проще, чем может казаться....74
Другие способы комбинирования классов....75
Шаг 6: использование инструментов интроспекции....78
Специальные атрибуты класса....79
Обобщенный инструмент отображения....80
Атрибуты экземпляра или атрибуты класса....82
Размышления относительно имен в классах инструментов....83
Финальная форма классов....84
Шаг 7 (последний): сохранение объектов в базе данных....85
Модули pickle, dbm и shelve....86
Сохранение объектов в базе данных shelve....87
Исследование хранилища shelve в интерактивной подсказке....88
Обновление объектов в хранилище shelve....90
Указания на будущее....92
Резюме....94
Проверьте свои знания: контрольные вопросы....94
Проверьте свои знания: ответы....95
ГЛАВА 29. Детали реализации классов....97
Оператор class....97
Общая форма....98
Пример....98
Методы....100
Пример метода....101
Вызов конструкторов суперклассов....102
Другие возможности вызова методов....102
Наследование....103
Построение дерева атрибутов....103
Специализации унаследованных методов....105
Методики связывания классов....105
Абстрактные суперклассы....107
Пространства имен: заключение....109
Простые имена: глобальные, если не выполнено их присваивание....110
Имена атрибутов: пространства имен объектов....110
“Дзен” пространств имен: присваивания классифицируют имена....111
Вложенные классы: снова о правиле областей видимости LEGB....113
Словари пространств имен: обзор....115
Связи между пространствами имен: инструмент подъема по дереву....118
Снова о строках документации....120
Классы или модули....121
Резюме....122
Проверьте свои знания: контрольные вопросы....122
Проверьте свои знания: ответы....123
ГЛАВА 30. Перегрузка операций....124
Основы....124
Конструкторы и выражения:__in it__и___sub___....125
Распространенные методы перегрузки операций....125
Индексирование и нарезание:__getitem_и_____setitem_....128
Перехват срезов....128
Нарезание и индексирование в Python 2.Х....130
Но метод__index__в Python З.Х не имеет отношения к индексированию!....131
Итерация по индексам:__getitem___....131
Итерируемые объекты:___iter__и___next____....132
Итерируемые объекты, определяемые пользователем....133
Множество итераторов в одном объекте....136
Альтернативная реализация: iter плюс yield....139
Членство: contains , iter и getitem....143
Доступ к атрибутам:_getattr__и___setattr___....146
Ссылка на атрибуты....147
Присваивание и удаление атрибутов....148
Другие инструменты управления атрибутами....149
Эмуляция защиты атрибутов экземпляра: часть 1....150
Строковое представление: г ер г и str....151
Для чего используются два метода отображения?....152
Замечания по использованию отображения....153
Использование с правой стороны и на месте:_г add_и_iadd___....154
Правостороннее сложение....155
Сложение на месте....158
Выражения вызовов:__cal 1__....159
Функциональные интерфейсы и код, основанный на обратных вызовах....161
Сравнения:___It_,___gt__и другие....163
Метод___стр__в Python 2.Х....164
Булевские проверки:_bool___и__1еп____....164
Булевские методы в Python 2.Х....165
Уничтожение объектов:__del___....167
Замечания относительно использования деструкторов....167
Резюме....168
Проверьте свои знания: контрольные вопросы....169
Проверьте свои знания: ответы....169
ГЛАВА 31. Проектирование с использованием классов....170
Python и объектно-ориентированное программирование....170
Полиморфизм означает интерфейсы, а не сигнатуры вызовов....171
Объектно-ориентированное программирование и наследование: отношения “является”....172
Объектно-ориентированное программирование и композиция: отношения “имеет”....174
Снова об обработчиках потоков данных....175
Объектно-ориентированное программирование и делегирование: промежуточные объекты-оболочки....179
Псевдозакрытые атрибуты классов....181
Обзор корректировки имен....181
Для чего используются псевдозакрытые атрибуты?....182
Методы являются объектами: связанные или несвязанные методы....184
Несвязанные методы являются функциями в Python З.Х....186
Связанные методы и другие вызываемые объекты....188
Классы являются объектами: обобщенные фабрики объектов....191
Для чего используются фабрики?....192
Множественное наследование: “подмешиваемые” классы....193
Реализация подмешиваемых классов отображения....194
Другие темы, связанные с проектированием....215
Резюме....215
Проверьте свои знания: контрольные вопросы....216
Проверьте свои знания: ответы....216
ГЛАВА 32. Расширенные возможности классов....217
Расширение встроенных типов....218
Расширение типов путем внедрения....218
Расширение типов путем создания подклассов....219
Модель классов “нового стиля”....221
Что нового в новом стиле?....222
Изменения в классах нового стиля....223
Процедура извлечения атрибутов для встроенных операций пропускает экземпляры....225
Изменения модели типов....230
Все классы являются производными от ob j ect....233
Изменение ромбовидного наследования....235
Дополнительные сведения о MRO: порядок распознавания методов....239
Пример: отображение атрибутов на источники наследования....242
Расширения в классах нового стиля....247
Слоты: объявления атрибутов....248
Свойства: средства доступа к атрибутам....257
Метод__getattribute___и дескрипторы: инструменты для работы с атрибутами....260
Другие изменения и расширения классов....261
Статические методы и методы классов....262
Для чего используются специальные методы?....262
Статические методы в Python 2.Х и З.Х....263
Альтернативы для статических методов....265
Использование статических методов и методов класса....266
Подсчет экземпляров с помощью статических методов....268
Подсчет экземпляров с помощью методов классов....269
Декораторы и метаклассы: часть 1....272
Основы декораторов функций....273
Первый взгляд на декораторы функций, определяемые пользователем....274
Первый взгляд на декораторы классов и метаклассы....276
Дополнительные сведения....278
Встроенная функция super: для лучшего или для худшего?....278
Продолжительные дебаты относительно super....278
Традиционная форма вызова методов суперкласса: переносимая, универсальная....280
Базовое использование встроенной функции super и связанные с ней компромиссы....280
Положительные стороны S 11рв Г: изменения деревьев и координирование 285 Изменения классов во время выполнения и super....287
Кооперативная координация вызовов методов при множественном наследовании....288
Сводка по super....300
Затруднения, связанные с классами....301
Изменение атрибутов классов может иметь побочные эффекты....302
Модификация изменяемых атрибутов классов тоже может иметь побочные эффекты....303
Множественное наследование: порядок имеет значение....304
Области видимости в методах и классах....305
Другие затруднения, связанные с классами....306
Еще раз о KISS: чрезмерно большое количество уровней....307
Резюме....308
Проверьте свои знания: контрольные вопросы....308
Проверьте свои знания: ответы....308
Проверьте свои знания: упражнения для части VI....310
Часть VII. Исключения и инструменты....316
ГЛАВА 33. Основы исключений....317
Для чего используются исключения?....317
Роли, исполняемые исключениями....318
Исключения: краткая история....319
Стандартный обработчик исключений....319
Перехват исключений....321
Генерация исключений....322
Исключения, определяемые пользователем....322
Действия при завершении....323
Резюме....326
Проверьте свои знания: контрольные вопросы....327
Проверьте свои знания: ответы....327
ГЛАВА 34. Детали обработки исключений....328
Оператор try/except/else....328
Как работают операторы try....329
Конструкции оператора try....330
Конструкция else оператора try....333
Пример: стандартное поведение....334
Пример: перехват встроенных исключений....335
Оператор try/finally....336
Пример: написание кода действий при завершении с помощью try/finally....337
Унифицированный оператор try/except/finally....338
Унифицированный синтаксис оператора try....339
Комбинирование finally и except за счет вложения....340
Пример унифицированного оператора try....340
Оператор raise....342
Генерация исключений....343
Области видимости и переменные except в try....344
Распространение исключений с помощью raise....345
Сцепление исключений в Python З.Х: raise from....346
Оператор assert....348
Пример: улавливание нарушений ограничений (но не ошибок!)....349
Диспетчеры контекстов with/as....350
Базовое использование....351
Протокол управления контекстами....352
Множество диспетчеров контекстов в Python 3.1, 2.7 и последующих версиях....354
Резюме....356
Проверьте свои знания: контрольные вопросы....356
Проверьте свои знания: ответы....356
ГЛАВА 35. Объекты исключений....358
Исключения: назад в будущее....359
Строковые исключения канули в лету!....359
Исключения на основе классов....360
Реализация классов исключений....361
Для чего используются иерархии исключений?....363
Встроенные классы исключений....366
Категории встроенных исключений....367
Стандартный вывод и состояние....368
Специальное отображение при выводе....370
Специальные данные и поведение....372
Предоставление деталей исключения....372
Предоставление методов исключений....373
Резюме....374
Проверьте свои знания: контрольные вопросы....374
Проверьте свои знания: ответы....375
ГЛАВА 36. Проектирование с использованием исключений....376
Вложение обработчиков исключений....376
Пример: вложение в потоке управления....378
Пример: синтаксическое вложение....378
Идиомы исключений....380
Прерывание множества вложенных циклов: “безусловный переход”....380
Исключения не всегда являются ошибками....381
Функции могут сигнализировать об условиях с помощью raise....382
Закрытие файлов и серверных подключений....383
Отладка с помощью внешних операторов try....384
Выполнение внутрипроцессных тестов....384
Дополнительные сведения о функции sys . exc inf о....385
Отображение сообщений об ошибках и трассировок....386
Советы по проектированию с использованием исключений и связанные с ними затруднения....387
Что должно быть помещено внутрь операторов try?....387
Перехват слишком многого: избегайте использования пустой конструкции except и конструкции except Exception....388
Перехват чересчур малого: используйте категории на основе классов....390
Сводка по базовому языку....391
Комплект инструментов Python....391
Инструменты для разработки, ориентированные на более крупные проекты....392
Резюме....396
Проверьте свои знания: контрольные вопросы....397
Проверьте свои знания: ответы....397
Проверьте свои знания: упражнения для части VII....397
Часть VIII. Более сложные темы....400
ГЛАВА 37. Unicode и байтовые строки....401
Изменения строк в Python З.Х....402
Основы строк....403
Схемы кодирования символов....403
Хранение строк Python в памяти....406
Типы строк Python....407
Текстовые и двоичные файлы....409
Написание базовых строк....410
Строковые литералы Python З.Х....411
Строковые литералы Python 2.Х....413
Преобразования строковых типов....413
Написание строк Unicode....415
Написание текста ASCII....415
Написание текста, отличающегося от ASCII....416
Кодирование и декодирование текста, отличающегося от ASCII....417
Другие схемы кодирования....418
Байтовые строковые литералы: закодированный текст....419
Преобразования между кодировками....421
Кодирование строк Unicode в Python 2.Х....421
Объявления кодировок в файлах исходного кода....425
Использование объектов bytes в Python З.Х....426
Вызовы методов....426
Операции над последовательностями....427
Другие способы создания объектов bytes....428
Смешивание строковых типов....429
Использование объектов bytearray в Python З.Х/2.6+....429
Объекты bytearray в действии....430
Сводка по строковым типам Python З.Х....432
Использование текстовых и двоичных файлов....432
Основы текстовых файлов....433
Текстовый и двоичный режимы в Python 2.Х и З.Х....434
Несоответствия типов и содержимого в Python З.Х....435
Использование файлов Unicode....436
Чтение и запись данных Unicode в Python З.Х....437
Обработка маркера ВОМ в Python З.Х....438
Файлы Unicode в Python 2.Х....441
Имена файлов и потоки данных Unicode....442
Другие изменения инструментов для обработки строк в Python З.Х....443
Модуль ге для сопоставления с образцом....443
Модуль struct для работы с двоичными данными....445
Модуль pickle для сериализации объектов....447
Инструменты для разбора XML....448
Резюме....452
Проверьте свои знания: контрольные вопросы....453
Проверьте свои знания: ответы....453
ГЛАВА 38. Управляемые атрибуты....456
Для чего используются управляемые атрибуты?....456
Вставка кода для запуска при доступе к атрибутам....457
Свойства....458
Основы....459
Первый пример....459
Вычисляемые атрибуты....460
Реализация свойств с помощью декораторов....461
Дескрипторы....463
Основы....463
Первый пример....466
Вычисляемые атрибуты....468
Использование информации состояния в дескрипторах....469
Связь между свойствами и дескрипторами....472
__getattr__и___getattribute___....474
Основы....475
Первый пример....478
Вычисляемые атрибуты....479
Сравнение___getattr__и____getattribute__....481
Сравнение методик управления....482
Перехват атрибутов для встроенных операций....485
Пример: проверка достоверности атрибутов....492
Использование свойств для проверки достоверности....493
Использование дескрипторов для проверки достоверности....495
Использование___getattr___для проверки достоверности....499
Использование___getattribute__для проверки достоверности....501
Резюме....502
Проверьте свои знания: контрольные вопросы....503
Проверьте свои знания: ответы....503
ГЛАВА 39. Декораторы....505
Что такое декоратор?....505
Управление вызовами и экземплярами....506
Управление функциями и классами....506
Использование и определение декораторов....507
Для чего используются декораторы?....507
Основы....509
Декораторы функций....509
Декораторы классов....513
Вложение декораторов....515
Аргументы декораторов....517
Декораторы одновременно управляют функциями и классами....518
Реализация декораторов функций....519
Отслеживание вызовов....519
Варианты предохранения состояния для декораторов....520
Грубые ошибки, связанные с классами, часть I: декорирование методов....525
Измерение времени вызовов....531
Добавление аргументов к декоратору....534
Реализация декораторов классов....537
Классы-одиночки....537
Отслеживание объектных интерфейсов....539
Грубые ошибки, связанные с классами, часть II: предохранение множества экземпляров....543
Декораторы или управляющие функции....544
Для чего используются декораторы? (Еще раз)....546
Управление функциями и классами напрямую....548
Пример: “закрытые” и “открытые” атрибуты....550
Реализация закрытых атрибутов....550
Детали реализации, часть I....552
Обобщение также для открытых объявлений....554
Детали реализации, часть II....556
Нерешенные проблемы....557
Python не поощряет контроль доступа....565
Пример: проверка допустимости аргументов функций....566
Цель....566
Базовый декоратор проверки вхождения значений в диапазон для позиционных аргументов....567
Обобщение для поддержки также ключевых аргументов и стандартных значений....569
Детали реализации....572
Нерешенные проблемы....575
Аргументы декоратора или аннотации функций....577
Другие приложения: проверка типов (если вы настаиваете!)....579
Резюме....580
Проверьте свои знания: контрольные вопросы....580
Проверьте свои знания: ответы....581
ГЛАВА 40. Метаклассы....591
Нужно ли иметь дело с метаклассами?....592
Повышение уровней “магии”....593
Язык привязок....594
Недостаток “вспомогательных” функций....595
Метаклассы против декораторов классов: раунд 1....597
Модель метаклассов....600
Классы являются экземплярами type....600
Метаклассы являются подклассами type....602
Протокол оператора class....603
Объявление метаклассов....604
Объявление в Python З.Х....604
Объявление в Python 2.Х....605
Координирование метаклассов в Python З.Х и 2.Х....606
Реализация метаклассов....606
Базовый метакласс....607
Настройка создания и инициализации....608
Другие методики реализации метаклассов....609
Наследование и экземпляр....614
Метакласс или суперкласс....616
Наследование: вся история....618
Методы метаклассов....624
Методы метаклассов или методы классов....625
Перегрузка операций в методах метакласса....625
Пример: добавление методов в классы....627
Ручное дополнение....627
Дополнение на основе метаклассов....629
Метаклассы против декораторов классов: раунд 2....630
Пример: применение декораторов к методам....635
Трассировка с помощью декорирования вручную....636
Трассировка с помощью метаклассов и декораторов....637
Применение любого декоратора к методам....638
Метаклассы против декораторов классов: раунд 3 (и последний)....640
Резюме....642
Проверьте свои знания: контрольные вопросы....643
Проверьте свои знания: ответы....643
ГЛАВА 41. Все хорошее когда-нибудь заканчивается....645
Парадокс Python....645
О “необязательных” языковых средствах....646
Против тревожных усовершенствований....647
Сложность или мощь....648
Простота или элитарность....649
Заключительные размышления....649
Куда двигаться дальше?....650
На бис: распечатайте собственный сертификат об окончании!....650
Часть IX. Приложения....654
Приложение А. Установка и конфигурирование....655
Установка интерпретатора Python....655
Присутствует ли Python на компьютере?....655
Где взять интерпретатор Python....656
Шаги установки....657
Конфигурирование интерпретатора Python....659
Переменные среды Python....659
Способы установки конфигурационных параметров....661
Аргументы командной строки интерпретатора Python....664
Командные строки запускающего модуля, появившегося в Python 3.3....667
Дополнительная помощь....668
Приложение Б. Запускающий модуль Windows для Python....669
Наследие Unix....669
Наследие Windows....670
Введение в запускающий модуль Windows....671
Учебное руководство по запускающему модулю Windows....673
Шаг 1: использование директив версий в файлах....673
Шаг 2: использование переключателей версий командной строки....676
Выводы: чистый выигрыш для Windows....677
Приложение В. Изменения в Python и настоящая книга....678
Главные отличия между Python 2.Х и Python З.Х....678
Отличия Python З.Х....679
Расширения, доступные только в Python З.Х....680
Общие замечания: изменения в Python З.Х....681
Изменения в библиотеках и инструментах....682
Переход на Python З.Х....683
Изменения в Python, относящиеся к пятому изданию: Python 2.7, 3.2, 3.3....683
Изменения в Python 2.7....684
Изменения в Python 3.8....684
Изменения в Python 3.7....684
Изменения в Python 3.3....686
Изменения в Python 3.2....687
Изменения в Python, относящиеся к четвертому изданию: Python 2.6, 3.0, 3.1....687
Изменения в Python 3.1....687
Изменения в Python 3.0 и 2.6....688
Удаления в языке Python 3.0....689
Изменения в Python, относящиеся к третьему изданию: Python 2.3, 2.4, 2.5....692
Более ранние и более поздние изменения в Python....692
Приложение Г. Решения упражнений, приводимых в конце частей....693
Часть VI, “Классы и объектно-ориентированное программирование”....693
Часть VII, “Исключения и инструменты”....701
Предметный указатель....710
По причине большого объема книга разделена на два тома. 2-й том обновленного 5-го издания известной книги Марка Лутца поможет вам быстро научиться писать эффективный высококачественный код на Python. Это руководство - идеальный способ начать изучение Python, будь вы новичок в программировании или профессиональный разработчик программного обеспечения на других языках.
Простое и понятное учебное пособие, укомплектованное контрольными вопросами, упражнениями и полезными иллюстрациями, позволит вам освоить основы линеек Python 3.X и 2.X. Вы также ознакомитесь с расширенными возможностями языка, получившими широкое распространение в коде Python.
Хорошая новость в том, что ООП в Python гораздо проще для понимания и использования, чем в других языках, таких как C++ или Java. Будучи динамически типизированным языком написания сценариев, Python устраняет большую часть синтаксического беспорядка и сложности, которые затуманивают ООП в других инструментах.