Главная » Просмотр файлов » Саммерфилд - Программирование на Python 3

Саммерфилд - Программирование на Python 3 (1077331), страница 99

Файл №1077331 Саммерфилд - Программирование на Python 3 (Саммерфилд - Программирование на Python 3) 99 страницаСаммерфилд - Программирование на Python 3 (1077331) страница 992018-01-10СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 99)

8.3 и 8.4. Еще одним основным абстрактным базовым классом является класс со. 10- Вазе, который наследуется всеми классами, выполняющими работу с файлами и потоками. Улучшенные приемы объектно-ориентированного программирования 443 Таблица 8.4. Основные абстрактные базовые классы в модуле сойест!опз АР1 Примеры АВС Наследует Все функции, методы и лямбда-функции оь)есС Са11аЫе 1п оЬ)есС Ьутеаггау, Ьутез, Отсс, ггохепзес, 1!в!, вес, зтг, Сор1е Сопта1пег Ьутев, тгосепзеС, втг, Сор1е паап() оЬ)есС НавоаЫе 1СЕг() оЬ)ест 1СЕгаЫЕ 1Сег(), пехС() 1СегаЫе оЬ)есС 11егатог 5!тес 1еп() ==, )=,[], 1еп(), стет(), сп, цес(), 1сеав(), кеув(), ча1- иез() Сопта1пег, !СегаЫе, 8!сап отсс Марр!по отсс Марр!п9 МитаЫеМарртп9 ьусеаггау, ьусез, 1сзс, зсг, сир1е Солта!пег, 1тегаЫе, о!сее Вецоепсе Ьутеаггач, 1!в! Сопта1пег, 11егаЫе, Зыео Мотао1е- Зецоепсе «,=, ==, )=, =», , $, 1еп(), стет(), сп, свссз)оспс() Солта!пег, 1СЕгаЫЕ, Бсгео ггохепзес, зес Бес вес МотаЫезес [], Ее1, 1еп(), !Сег(), 1п, с1еаг(), рет(), 11еав(), Кеув(), рор(), рорстеа(), ветеетао11(), ирОате(), ча1оез() [], 1еп(), 11ег(), гечегзеа(), сп, соопс(), !псех() [], асч Ое), 1еп(), 1Сег(), гечегзее(), 1п, аррепе(), соопс(), ехсепо(), 1поех(), спвегт(), рор(), геаоче(), гечегве() «, =, ==, )=, =», , Ь, (, а=, ~=, =, -=, 1еп(), сСег(), тп, асе(), с1еаг(), О!визге(), !за!в)осот(), рор(), геаоче() Ьутеаггау, Ьутев, соПесттопз.сецие, Отсс, тгосепвес, 11вт, вет, втг, Сор1е Ьутеаггау, Ьусез, соПестсопв,сецое, Отсс, тгосепвес, 1>вт, зет, зтг, Сор1е 444 Глава 8.

Усовершенствованные приемы программирования Чтобы полностью интегрировать наши собственные числовые классы или классы коллекций, мы должны наследовать их от стандартных абстрактных базовых классов. Например, класс Зогтео1твт является последовательностью, но если ничего не предпринять, то инструкция 1з!па!алое(1, со11ест!опз. Зецпепсе) вернет значение Га1ве. Чтобы исправить этот недостаток, можно просто унаследовать соответствующий абстрактный базовый класс: с1азя Зогтепшят(со11есттопз.вецчепсе): После того как со11есыопв,Зецсепсе будет использован в качестве базового класса, инструкция !з1пвтапсе() будет возвращать Тгзе. Кроме того, в этом случае нам придется реализовать методы !и!т () (или пен- ()), цес!(ез () и 1еп () (что мы уже сделали).

Абстрактный базовый класс со11ест!опв. Зецэепсе также предоставляет неабстрактные реализации методов солта!пз (), 11ег (), гечегвег) (), созп!() и !поех(). Мы переопределили в классе Зогтес1!вт все эти методы, но мы могли бы использовать версии этих методов из абстрактного базового класса, не создавая повторные реализации. Мы не можем объявить класс Зогтез1тзт подклассом класса со11ест!опв. МптаЫеЗециепсе, хотя список относится к категории изменяемых объектов, потому что класс Зогтез'с!вт не имеет всех методов, которые должны реализовать наследники класса соПесыопв.

МстаЫеЗецпепсе, — таких как зештез () и аррепг)(). (Реализация такой версии класса Зогтег)1!зт приводится в файле $огтегН(з(АЬеру. Альтернативный способ превращения класса Зогтеоствт в подкласс класса со11ест!опв. Зецэепсе будет описан в разделе еМетаклассыэ.) Метакпассы, стр. 452 Теперь, когда мы знаем, как создавать собственные классы с использованием стандартных абстрактных классов, перейдем к другому применению абстрактных базовых классов: для обеспечения соглашений об интерфейсе в наших собственных классах. Мы рассмотрим три различных примера, чтобы представить различные аспекты создания и использования абстрактных базовых классов. Начнем с очень простого примера, демонстрирующего, как организовать работу со свойствами, доступными для чтения и для записи. Класс используется для представления бытовых приборов.

Каждый объект класса, представляющий прибор, должен содержать строку с названием модели, доступную только для чтения, и цену, доступную для чтения и для записи. Нам также необходимо гарантировать переопределение метода !и!! () базового абстрактного класса в классах- наследниках. Ниже приводится определение абстрактного базового класса (из файла Арр(!алсечру); мы опустили строку с инструкцией Улучшенные приемы объектно-ориентированного программирования 445 !арог! аос, которая необходима, чтобы получить доступ к функциям ззвт гас!ее! лоо() и аозт гас!о горе гту(), каждая из которых может использоваться как декоратор: с1ввв Арр1тапсе(эетас1ввв=вэс.

АВСМета); рвэс.аэвтгастэетяос ает тптт (ве1(, эсое1, рг!се): ве1(, эсое1 = эспе1 ве1(.рг!се = рг!се Сет дет ргтсе(ве1(): гетпгп ве1Г. ргтсе Сет вет ргтсе(ве1(, ргтсе). ве1(. ргтсе = рысе рг!се = вЬс.вэвтгвстргсрегту(дет рысе, вет ргтсе) Фргирегту Оет эспе1(ве1(): ге!игл ве1(, ассе1 В качестве метакласса мы указали аЬс. АВСМета, так как это является обязательным требованием при создании абстрактных классов. Безусловно, точно так же можно было бы использовать любой из подклассов класса аЬс.АВСМета. Метод !и!! () объявлен абстрактным, чтобы гарантировать его переопределение в дочерних классах, и предусмотрена его реализация, которая, как ожидается (но не обязательно), будет использоваться классами-наследниками.

Мы не можем использовать декоратор для создания абстрактного свойства, доступного для чтения и для записи; кроме того, мы не использовали частные имена для методов чтения и записи, так как это привело бы к неудобствам при переопределении в подклассах. Свойство аоое1 не является абстрактным, поэтому его не обязательно переопределять в подклассах. Класс Арр1!- апсе не может использоваться для создания объектов, так как он содержит абстрактные атрибуты, Ниже приводится пример его подкласса: с1авв Ссскег(Арр1!апсе): Сет тптт (ве!Г, эозе1, рг!се, Гпе1): впрег(), тпы (эопе1, ргтсе) ве1(.тпе1 = Гпе1 ргтсе = ргсрегту( 1аээпв ве1(: пирет().рг!се, 1аэвеа ве1Г, рг!се: верег().вет ргтсе(ргтсе)) Класс СооКег должен переопределить метод !и!т () и свойство ргтсе.

Переопределив свойство, мы просто переложили всю работу на базовый класс. Свойство аоое1, доступное только для чтения, наследуется в обычном порядке. Мы могли бы на основе класса Арр1тапсе создать намного больше классов, таких как Ег!оде, Тоавтег и т. д. 446 Глава 8, Усовершенствованные приемы программирования Следующий абстрактный базовый класс, который мы рассмотрим, еще короче. Это абстрактный класс функтора (в файле Тех1г негру), выполняющего фильтрацию текста: с1авв Тех1Е!11ег(аетас1ввв=асс. АВСМета) .

ФаЬа. аЬвтгас1р горе гту бег гв 1гапвтогвег(ве11): ге!ее Иа11ар1еаептебЕггог() ФвЬс.аЬвтгвстаетпоб бе! оа11 (ве11): гв!ве Ио11ар1еаептебЕггог() Абстрактный класс Тех1Е!11ег вообще не содержит никакой функциональности — он существует исключительно ради того, чтобы определить интерфейс, — в данном случае свойство !в 1гапвтогаег и метод св11 (), которые должны быть переопределены во всех его подклассах. Поскольку абстрактные свойство и метод не имеют реализации, отсутствует возможность обращаться к ним из подклассов, поэтому при попытке задействовать их (например, с помощью функции ворег()) вместо выполнения безвредной инструкции рава возбуждается исключение. Ниже приводится пример простого подкласса: с1ввв СпвгСоаптег(Тех1Ет11ег); Фргорег1у бег !в 1гапвтогаег(ве11); гетагп Еа1ве бег оа11 (ве11, тех1, аьвгв): соап1 = 0 тог о !и тех1: !Г о !и спагв: соап1 ь= 1 ге1агп соап1 Данный фильтр текста не является преобразователем, потому что он не изменяет заданный текст, а просто возвращает количество указанных символов в тексте, Ниже приводится пример использования этого класса: хоне1 соаптег = СпагСоап1ег() хоне1 соап1ег("боо т!вп апб св1 Гтвл", "ветоа") В вернет: 5 Два других класса текстовых фильтров, ВопЕепс1ЬЕпсобе и ВопЕепс1ЬВесобе, являются преобразователями.

Ниже приводятся примеры их использования: г1е епсобег = Вап(епд(ЬЕпсобе() г1е техт = г1е епсобег(тех1) 447 Улучшенные приемы объектно-ориентированного программирования г1е бесобег = Воп!епдСЬОесибе() ог!дспа1 техт = г1е бесобег(г1е Сект) Класс Роп1епдсЬЕпсобе преобразует строку байтов в кодировке 1)ТР-8, замещая байты Охдд последовательностью Охдд, Охдт, Охдд, и любые последовательности, содержащие от трех до 255 одинаковых байтов,— последовательностями ОМОВ, количество, байт. Если в строке имеется много фрагментов, состоящих из четырех идущих подряд одинаковых символов, этот класс будет способен воспроизвести более короткую строку байтов, чем простая последовательность байтов в кодировке 1)ТР-8.

Класс йип1епдСЬОесобе принимает строку байтов, созданную классом ЯипсепдСЬЕпсобе, и возвращает оригинальную строку. Ниже приводится начало определения класса ВипЬепдСЬОесобе: с1авз Вопиепдтпресобе(техтг!1Сег): Ергорегсу бег ьв с~апвгигаег(вест): ге!игл Тгое бес са11 (ве1Г, г1е Ьутев); Мы опустили тело метода саП (), но вы можете увидеть его в файле с исходными текстами, среди примеров к этой книге.' Класс Воп1епдсьЕпсобе имеет ту же структуру. Последний абстрактный базовый класс, который мы рассмотрим, описывает прикладной программный интерфейс (Арр1!сас(оп Ргоягаптпс(пи 1пСегуасе, АР1) и предоставляет реализацию по умолчанию механизма отмены изменений. Ниже приводится полное определение абстрактного класса (из файла АЬз1гасс.ру): с1авв Вибо(аесас1авв=асс.

Авсмеса); Фаьс.аьвсгассаеспаб бе( !пст (ве)Г): ве1Г, опоив = () Эаис.аЬвсгастргорегСУ бе( сап опбо(ве1(): гетогп Ьио1(ве1Г. албов) анаис.аьвсгассееспоб бет опбо(ве1(): аввегС ве1Г. ипбив, "потиспд 1етс со опбс" ве1(, опоив.рор()(ве1Г) бе( абб опбо(ве1Г, ипбо): ве1(. ипбов.аррепб(ипбо) Тех!)гЖег ру. — Прим. перев. 448 Глава 8.

Характеристики

Тип файла
DJVU-файл
Размер
6,88 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6451
Авторов
на СтудИзбе
305
Средний доход
с одного платного файла
Обучение Подробнее