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

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

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

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

гетпгп зе1Г. Ьасядгоппз Но вместо этого мы использовали более компактное решение. Зная, что все неспециальные атрибуты объекта хранятся в словаре зе1г. 0101, мы предпочли обращаться к ним напрямую. Для частных атрибутов (имена которых начинаются с двух символов подчеркивания) производится приведение их имен к форме с)азэИаае агсг10исе)уаве, и мы должны учитывать это обстоятельство при извлечении значений атрибутов из частного словаря объекта.

Чтобы выполнить приведение имени при поиске частного атрибута и воссоздать корректный текст при возбуждении исключения А11г1ЬЬ1еЕггог, нам необходимо знать имя класса, которому принадлежит метод. (Это может быть не класс 1ваде, потому что объект может оказаться экземпляром подкласса, наследующего класс 1ваде.) Каждый объект имеет специальный атрибут с1азз, поэтому внутри методов всегда можно обратиться к атрибуту зе1г.

с1азз , не рискуя попасть в бесконечную рекурсию. Обратите внимание на тонкое различие: при использовании метода детаттг () и выражения зе1(. с1аэз обеспечивается доступ к ат- 426 Глава 8, Усовершенствованные приемы программирования рибуту экземпляра класса (который может быть подклассом), а при прямом обращении к атрибуту используется класс, в котором этот атрибут был определен. Нам осталось рассмотреть еще один специальный метод — метод це1а11шьоте (). если метод це1а11г () вызывается в последнюю очередь, когда выполняется поиск (неспециальных) атрибутов, то метод цета11ыЬо1е () вызывается в первую очередь, при каждом обращении к любому атрибуту. Хотя в определенных случаях метод цета11гтоо1е () может оказаться не только полезным, но и необходимым, тем не менее переопределение этого метода может оказаться непростым делом.

При переопределении особое внимание следует уделять тому, чтобы исключить возможность рекурсивного вызова — избежать рекурсии в таких случаях часто удается с помощью вызовов аорег(). цета11ыЬоте () или оЬ)ес1. цета11гтвоте (). Кроме того, поскольку метод це1а11гтвоте () вызывается при обращении к любому атрибуту, его переопределение легко может привести к потере производительности по сравнению с прямым доступом к атрибутам или свойствам. Ни один из классов, которые приводятся в этой книге, не переопределяет этот метод. Функторы В языке Ру1Лоп объектами функций являются ссылки на любые вызываемые объекты, такие как функции, лямбда-функции или методы.

Под это определение также подпадают и классы, поскольку ссылки на классы можно вызывать как функции, которые при вызове возвращают объект данного класса, например х = тп1(5). В информатике функ- тором называется объект, который может вызываться, как если бы он был функцией, поэтому в терминах языка Ру1Лоп функтор является разновидностью объекта функции. Любой класс, имеющий специальный метод са11 (), является функтором. Главноедостоинствофункторов заключается в том, что они могут поддерживать некоторую информацию о состоянии.

Например, можно создать функтор, который всегда удаляет основные знаки пунктуации с обоих концов строки, как показано ниже: атгтр ропотое1топ = 81гтр(",;:.'?") атг1р ропс1оа11оп(?ьапо апоу.'') а вернет: 'сапе апоу' Здесь создается экземпляр функтора 81г1р„инициализированный значением ",;: .!?". Всякий раз, когда будет вызываться экземпляр этого функтора, он будет возвращать полученную строку с отброшенными знаками пунктуации. Ниже приводится полная реализация класса 81гтр: Улучшенные приемы объектно-ориентированного программирования 427 с!дав 31гтр.' Сет тптт (ве11, слагастегв); ве1т.сяагастегв = слагас1ега Сет са!1 (ве11, втыпд): гетпгп в1 г!пд.

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

Замыкание — это функция или метод, которые запоминают некоторое состояние. Например: Сет ааяе в1гтр Гппс1!еп(сяагас1егв): сет втг!р гипс!!Ьп(втыпд): ге1игп в1г!пд.в1ыр(сяагас1егв) ге1вгп втгтр типот!оп втыр рипс1ват!Ьп = еаае втгтр твпс1!оп(",;:,'.?") втг!р рипс1иаттоп("(апс апау!") в вернет: 'ьапс апоу' Функция саяе в1г!р 1зпс1!оп() принимает в качестве единственного аргумента строку символов, которые следует удалять, и возвращает функцию в1г!р тепс1!Ьп(), принимающую строковый аргумент и удаляющую из него символы, полученные в момент создания замыкания. Мы можем создать произвольное число экземпляров класса 811!р, каждый со своим набором удаляемых символов, и точно так же мы можем создать произвольное число замыканий, каждое со своим набором символов.

Классическим примером использования функторов может служить ключевая функция, применяемая при сортировке. Ниже приводится универсальный класс функтора Зог1Кеу (из файла Яог(Кеу ру): с1авв Всг1кеу; Сет !пт1 (ве11, а11гтЬи1е паеев): ве1(.аттг!сите пааев = а11г!Ьв1е паеев сег са11 (ве11, !пвтапсе): ча1пев = () гог а11гтьи1е папе тп ве1(.а11г!ьите паеев: ча1иев. аррепс(детаттг(тпвтапсе, а11г!ьи1е паве)) ге!игл уа1иев 428 Глава 8. Усовершенствованные приемы программирования Когда создается объект 8огтКеу, он сохраняет кортеж с именами атрибутов, с которыми он был инициализирован. Когда производится вызов объекта, создается список значений атрибутов для заданного экземпляра, следующих в том же порядке, в каком они были указаны при инициализации объекта 8огтКеу.

Например, представим, что у нас имеется класс Регзоп: с1аэа Регзоп: Пет шт1 (зе11, Гогепаяе, зпгпаее, еяа!1): зе1Г.Гогепаае = Гогепаяе зе11.асгпаяе = апгпаее зе1т.езат! = еза!! Допустим, что у нас имеется список реор1е объектов Регзоп. Тогда этот список можно отсортировать по фамилиям людей следующим способом: реор1е.зог1(Кеу=8огтКеу("эпгпаее")). Если в списке присутствуют одинаковые фамилии, то можно отсортировать список сначала по фамилиям, а потом по именам: реор1е, аог1(Кеу=8огтКеу("зигпаае", "тоге- паве")). А если в списке присутствует набор одинаковых фамилий н имен, можно включить в сортировку еще и адреса электронной почты.

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

а11где11ег( зигпаее, 1огепаее )). Функция орегатог. а11где11ег() возвращает функцию (замыкание), при обращении в контексте объекта возвращающую атрибуты объекта, имена которых были указаны при создании замыкания. В языке Ру1Ьоп функторы используются реже, чем в других языках программирования, поддерживающих такую возможность, потому что в языке Ру1Ьоп имеются другие средства достижения того же эффекта, например, замыкания и функции доступа к атрибутам. Менеджеры контекста Менеджеры контекста позволяют упростить программный код, гарантируя выполнение определенных операций до и после выполнения некоторого блока программного кода. Такое поведение обусловлено тем, что менеджеры контекста определяют два специальных метода— ептег () и ехтт (), которые интерпретируются особым образом в области видимости инструкции н!1п.

Когда с помощью инструкции нттП создается менеджер контекста, автоматически вызывается его ме- Улучшенные приемы объектно-ориентированного программирование 429 тод ептег (), а когда поток выполнения покидает область видимости менеджера контекста, автоматически вызывается его метод ехм (). У нас имеется возможность создавать свои собственные менеджеры контекста или использовать предопределенные — как будет показано ниже в этом подразделе объекты файлов, возвращаемые встроенной функцией орел(), являются менеджерами контекста. Ниже приводится синтаксис использования менеджера контекста: нмп екргеаатеп аа хагташе; аж ге Выражение екргеашоп должно быть менеджером контекста или воспроизводить его. Если в инструкции указана необязательная часть аа уагтаэ)е, в переменную хаг)аЫе записывается ссылка на объект, возвращаемый методом ептег () менеджера контекста (зачастую это сам менеджер контекста).

Поскольку менеджеры контекста гарантируют вызов метода ехм () (даже в случае исключений), во многих ситуациях они могут использоваться для устранения блоков г1па11У. Некоторые типы данных в языке РУФЬоп являются менеджерами контекста„например, все объекты файлов, создаваемых функцией орел(); поэтому у нас имеется возможность отказаться от использования блоков т! па11у при работе с файлами, как это показано в следующих двух эквивалентных фрагментах (если исходить из предположения, что гдето в другом месте присутствует определение функции р госева( )): тп = напе тгу.

тп = преп(гт1епаее) Гог 1(пе 1п тл: ргосеав(11пе) ехсерт Епх1гопзептЕггог аа егг: рг1пт(егг) Г)паыу: (Г тл 1а пот Ноле: гп.с1оае() т гу: нып преп(тт1епаее) аа ГП; тог 1тпе 1п тл; ргосеаа( 1юе) ехсерт Епч1гопаептЕггог аа егг; ргтпт(егг) В действительности менеджеры контекстов не обязаны обеспечивать дальнейшего распространения исключений, но это привело бы к сокрытию любых исключений, что почти всегда оказалось бы программной ошибкой. Все встроенные менеджеры контекста и менеджеры Объект файла является менеджером контекста, реализация метода ех!т () которого всегда закрывает файл, если он был открыт. Метод ех(1 () будет выполняться независимо от того, возникло исключение или нет, но во втором случае исключение продолжит свое распространение вверх по стеку возвратов. Эта особенность гарантирует, что файл будет закрыт и у нас останется возможность перехватить и обработать любую ошибку, в данном случае — вывести сообщение.

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

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

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

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