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

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

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

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

С идеями, касающимися возможного использования аннотаций, можно ознакомиться в предложении по расширению РЕР 3107 «Рппс11оп АппоСаФ(опав по адресу: шшш.руяоп.огд/г)еоурераурер-31 07; там же можно найти несколько полезных ссылок. Улучшенные приемы объектно-ориентированного программирования В этом разделе мы более подробно рассмотрим поддержку объектноориентированного программирования в языке РуФ)топ. Познакомимся со множеством приемов, которые помогают уменьшить объем программного кода, а также с приемами, расширяющими существующие возможности программирования.

Но сначала мы рассмотрим одну новую, очень маленькую и очень простую особенность. Ниже приводится 422 Глава 8. Усовершенствованные приемы программирования начало определения класса Ро1п1, обладающего теми же возможностями, что и версия этого класса из главы 6: с1ааа Рс(с1; а1с1а=(х,у) Сет 1с(1 (ае11, х=з, У=О): аа11. х = х ае11. у = у Когда класс создается без использования частной переменной а1о1в, для каждого экземпляра класса интерпретатор создает словарь с именем О(с1, и этот словарь используется для хранения атрибутов данных экземпляра, поэтому имеется возможность добавлять и удалять атрибуты объектов.

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

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

Например, обращение к атрибуту о гв, а вернет число 97, огв. 7 вернет 90, а огО. е вернет 229. (Но обращение к атрибуту о ге.! и подобным ему будет вызывать синтаксическую ошибку.) Обратите внимание, что если ввести определение класса Ога в среде 1РЬЕ, он не будет работать, если выполнить выражение ого' = Ого(). Это Улучшенные приемы объектно-ориентированного программирования обусловлено тем, что экземпляр класса имеет то же имя, что и встроенная функция оге(), которая используется методом класса Огз.

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

Ьгз(), а не просто огз(). Ниже приводится другой пример небольшого, но законченного класса. Он позволяет создавать «константы». Даже при использовании этого класса совсем несложно изменить значение такой «константы», но он хотя бы предотвращает самые простые ошибки: с1ааа Сопа1: пег ае1а11г (ае11, папа, »а1па): тт папе тп ае11. гнат гатаа Ча1иаЕггпг("саппо1 слапце а сопа1 амгтЬпте") ае11. Ьтс1 (папе] = ча1ае лет Па1аттг (аа11, паза); !т паве тп ае11, Ь!Ь1 гапае ча1паеггог("саппот пе1ете а сола! а11ыьпта") гатаа Аттг!ЬитеЕггог("'(0)' сЬ)ест Ьаа пп а11гтаи1а '(!)'" .Гогпат(ае11.

с1ааа . паве , папе)) С помощью этого класса можно создавать объекты констант, скажем, так: сола!=Сопа1(), и устанавливать любые их атрибуты, какие только потребуется, например, сопа1.1!зтт = 591. Но, как только значение атрибута будет установлено, оно будет доступно только для чтения — любые попытки изменить или удалить атрибут будут возбуждать исключение На10еЕггог. Мы не стали переопределять метод цвтаттг (), потому что метод оь]ес1.

це1а11г,() базового класса реализует все, что нам необходимо, — возвращает значение требуемого атрибута или возбуждает исключение А11г! Ь01еЕггог, если указанный атрибут отсутствует. В методе зе1аттг () имитируется сообщение об ошибке, которое выводится методом цетаттг () при попытке обратиться к несуществующему атрибуту, для чего нам потребовалось получить имя класса и имя несуществующего атрибута. Работа класса основана на использовании атрибута Ьтст объекта, который также используется следующими методами базового класса: це1а11г (), ве1а11г () и Ье1а11г (); в данном случае мы используем только метод це1- 424 Глава 8. Усовершенствованные приемы программирования асс г () базового класса. Все специальные методы, используемые для доступа к атрибутам, перечислены в табл. 8.2.

Таблица 8.2. Специальные методы доступа к атрибутам Синтаксис Используется Описание Удаляет атрибут п из объекта х Се1аССг,(ве1(, паве) Ссг (ве!С) Ое! х.п Ссг(х) Возвращает список имен атри- бутов объекта х десассг (ве1(, пвее) Возвращает значение атрибута п объекта х, если он существует ч=х.п Возвращает значение атрибута и объекта х; подробности в тексте десвттгсспте (ве1Г, папе) ч=хп Присваивает значение ч атрибу- ту и объекта х весассг (ве1С папе, ча1пе) х.п = ч Существует еще один способ реализации констант — с использованием именованных кортежей. Ниже приводится пара примеров: Совет = со11ес11опв.пааестор1е(" ', "асп пах")(191, 591) Сопвс.а!и, Сопвт авх Е вернет: (191, 591) ОГ(вес = со!!ест!ров.пааептир1е(" ", "сз паее Оевсгсртсоп")(*герде(9)) О(свес.

1с, Ос(вес.пвае, О(свес.севсг1рс1оп в вернет; (О, 1, 2) ергорегсу пег нспсп(ве)г); гетчгп ве!С, н1ССП Такой способ отличается простотой, но он может оказаться утомительным, если потребуется реализовать достаточно много свойств, доступных только для чтения. Ниже приводится другое решение, которое за- В обоих случаях мы использовали ничего не значащее имя для именованного кортежа, потому что каждый раз нам необходим лишь один экземпляр кортежа, а не подкласс, который мог бы использоваться для создания нескольких экземпляров именованных кортежей.

Язык РуСЬоп не поддерживает такой тип данных, как перечисления, тем не менее мы можем использовать именованные кортежи для достижения того же эффекта. а Заканчивая рассмотрение специальных методов доступа !авда ру к атРибУтам, веРнемсЯ к пРимеРУ, котоРый пеРвый Раз стр. 309 был продемонстрирован в главе 6. В этой главе мы создали класс !паде, который имел фиксированные ширину, высоту и цвет фона, задававшиеся в момент создания экземпляра !саде (и которые могли изменяться при загрузке изображения из файла). Мы обеспечили доступ к этим атрибутам с помощью свойств, доступных только для чтения. Например: Улучшенные приемы объектно-ориентированного программирования 425 ключается в обслуживании всех свойств класса 1ваде, доступных толь- ко для чтения: Пет детаыг (зе1Г, паве).

тт папе == "со1огз": гетигп зе1(зе11. со1огз) с1аззпаве = эе!Г. с1аэз . папе тт паве 1п Ггогепзе1(("Ьасядгоипзс, "нютп", "Петдпт")): гетиГп зз1Г. 01С1 (" (О) (1)".Гогват(01азплаВЕ, Пазэ)) гатзе Аттг1Ьи1еЕггог("'(О)' оЬ)ест Ьаэ по аттг1Ьше '(1)'" .Гогват(с1аззпаве, паве)) Если попытаться обратиться к атрибуту объекта и атрибут не будет обнаружен, интерпретатор вызовет метод детаттг,() (при условии, что класс предоставляет его реализацию и не был переопределен метод детзттггззте ()) с именем атрибута в качестве параметра. Реализация метода детзттг () должна возбуждать исключение Аттг1ЬЬ(еЕггог, если она не обслуживает указанный атрибут.

Например, если в программе производится обращение к атрибуту тваде. со1оге и интерпретатор не находит его, будет произведен вызов метода 1взде. детзттг (1ваде, "со1огз" ). В данном случае метод детаттг () обслужит атрибут с именем "со1огз" и вернет копию множества цветов, использующихся в изображении. Другие атрибуты являются неизменяемыми объектами, поэтому возврат прямых ссылок на эти атрибуты не таит в себе никакой угрозы. Для каждого атрибута можно было бы предусмотреть отдельную инструкцию е1)г, как показано ниже: е111 паве == "Ьасядгоппп".

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

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

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

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