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

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

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

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

Вслед за инструкциями импорта следуют объявления наших собственных исключений: с1ааа 1вацеЕггог(Ехсерттоп): рава с1ааа СооготпатеЕггог(!вацеЕггог): рава Мы показали только первые два класса исключений, остальные (ЕоаЬЕггог, 5ачеЕггог, Ехрог(Еггог и ))ОЕ!1епавеЕггог) создаются точно так же и наследуют исключение 1вадеЕггог. Пользователи класса 1ваде могут выбирать между обработкой конкретных исключений и обработкой базового исключения 1вацеЕггог.

Остальную часть модуля занимает определение класса 1ваде, и в самом конце находятся три стандартные строки, запускающие выполнение доктестов модуля. Прежде чем перейти к знакомству с классом и его методами, посмотрим, как его можно использовать: Ьогоег со1ог = "ФЕЕОООО" Ф красный аоиаге со1ог = "ФООООЕГ" в синий итого, Петцы = 240, 60 в!ох, втьу = ытьть // 2, ьетцпт // 2 !ваде = 1ваце.

1ваце(и!ьтп, ьетдпт, "ааиаге еуе.твц") Гог х тп гапце(итого): тог у тп гапде(пе!дпт): тг х < 5 ог х >= ытьтп - 5 ог у < 5 ог у >= па!Опт — 5: !ваде[х, у] = Ьогоег со!ог е1тт в!Ьх - 20 < х < в!ох и 20 апо втоу - 20 < у < в!Ьу + 20: шаце[х, у] = ацоаге со1ог !ваде.ааче() >ваде.ехрогт("аоиаге еуе.хрв") Обратите внимание, что при установке значений цвета в изображении допускается использовать оператор доступа к элементам ([]). Квадратные скобки могут также использоваться для получения и удаления (фактически для установки в цвет фона) значений цвета в точках с определенными координатами (х, у). Координаты передаются в виде единого кортежа (благодаря оператору запятой), как если бы мы записали обращение в виде: !ваде[( х, у) ].

В языке Ру(]топ легко можно добиться такого вида интеграции с синтаксисом — достаточно лишь реализовать соответствующие специальные методы, которыми в данном случае являются методы реализации оператора доступа к элементу: де!- !сев (), вес!сев ()и Ье1!сев (). Для представления цветов в классе 1ваде используются строки шестнадцатеричных цифр. Цвет фона должен определяться при создании изображения, в противном случае по умолчанию используется белый цвет. Класс 1ваце может сохранять на диск и загружать с диска изображения в своем собственном формате, но он также может экспортировать изображения в формат .х]олт, с которым способны работать многие Глава б.

Объектно-ориентированное программирование 308 Рис.6.6. Изображение едиаге еуе.хрт приложения, предназначенные для работы с графикой. Изображение .хрт, которое воспроизводит данный фрагмент программного кода, приводится на рис. 6.6. Теперь приступим к знакомству с методами класса 1вадв, начав с инструкции с1ввв и метода инициализации: с1авв 1еаде: бег спсс (ве1(. е1бсп.

ЬеСдпс. Сс1епаее="". ЬаоКдгоипб="ФЕЕЕЕЕЕ"): ве1(.тс1епаве = (11епаее зе1(. Ьаокдгоипб = ЬаоК9гоопб ве1(. бата = () ее1(. есбтв = нсбСП ЗЕП. Ьесдвт = Песдпт ве1(. СЬ1огв = (ве1(. ЬасК9гоипб) При создании экземпляра класса 1ваде пользователь (то есть программист — пользователь класса) должен указать ширину и высоту изображения, а имя файла и цвет фона являются необязательными, потому что эти параметры имеют значения по умолчанию.

Ключами словаря ве1Г. баСа являются координаты (х, у), а его значениями — строки, обозначающие цвет. Множество ве1(. со1огв инициализируется значением цвета фона — в нем будут храниться все уникальные значения цвета, присутствующие в изображении. Все атрибуты класса, за исключением (11впвве, являются частными, поэтому нам необходимо реализовать средства доступа к ним.

Это легко можно сделать с помощью свойств.' Эргорегту бе( ЬасКдгоипб(ве1(): гетогп ве1Г. ЬасКдгоопб Эргорегту бет есбСП(ее1(); гетогп ве1( исбСП Эргорегту В главе 8 будет представлен совершенно иной подход к обеспечению доступа к атрибутам — о использованием таких методов, как детаттг () н зесассг (), что в некоторых случаях может быть очень удобно. 309 Собственные классы коллекций дет Петры(ае)т): гетогп ве1(. Пе!ОШ Фргорегту де( со1ога(ае1(): гетцгп вет(ае1(. со1ога) При возвращении атрибута объектом нам необходимо понимать разницу между изменяемыми и неизменяемыми типами.

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

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

соогд!пате). аааегт 1еп(ооогдтпате) == 2, "соогдтпате алоо1д Ье а 2-тор1е" т( (пот (О <= ооогд!пате[О] < ае1г.и!ото) ог пот (О <= соогдтпате[ 1] < ае1Г.Пе!ОП!)): гатае соогд!патееггог(атг(сад<о!пате)) гетега ве1г. дата.рет(тцр1е(ооогдтпате), ае1г. ьаокйгоопд) Для получения значения цвета из указанных координат мы использовали метод с!с!, Оет() со значением по умолчанию, равным цвету фона, Это гарантирует, что если для данной пары координат цвет никогда не Этот метод возвращает цвет пикселя с заданными координатами, когда вызывающая программа использует оператор доступа к элементам ([]). Специальный метод реализации оператора доступа к элементам и некоторые другие специальные методы, имеющие отношение к коллекциям, перечислены в табл.

6.4. Мы будем применять две тактики для организации доступа к элементам. Первая тактика состоит в том, чтобы предварительно проверить, является ли аргумент сод гд!пате последовательностью из двух элементов (обычно кортеж из двух элементов), для чего используется инструкция аааегс. Вторая тактика состоит в том, что принимаются любые координаты, но если они выходят за пределы изображения, возбуждается наше собственное исключение.

Глава б. Объектно-ориентированное программирование устанавливался, вместо возбуждения исключения КеуЕггог будет воз- вращен цвет фона. се( ветыеэ (ве1(, соогс1пвте, со1ог); вввегт!еп(сорго!пате) == 2, "соогс1пате впои!с ье в 2-тчр1е" тг (пот (О <= ссогс(пате(О] < ве1(.и!с!в) ог пот (О <= сорго!пате(1) < ве1Г.Пе(ОМ)): гатве Соого1пвтеЕггог(втг(соогс1пате)) тт сс1сг == ве1Г. Ьасхргоппо: ве1(. озтв, рср(тпр1е(сов<с!пате), мопе) е1ве: ве11. Овтв(тпр1е(свого)пате)) = со!Ьг ве!Г.

сс1огв.воб(со!Ьг) Таблица 6.4. Специальные методы коллекций Специальный метод Пример Описание использования сопта1пв (ве1(, х) Возвращает Тгпе, если х присутст- вует з последовательности у или х является ключом отображения у х тп у Удаляет К-й элемент последова- тельности у или элементе ключом К в отображении у се1ыеэ (ве!г, к) Се1 у(К) Возвращает К-й элемент последова- тельности у или значение элемента с ключом К в отображении у у(К) Оет!теэ (ве!т, к) Возвращает итератор по элемен- там последовательности у или по ключам отображения у !Тег (ве1Г) Тот х1п у: рввв !еп (ве1() гвчегвео,(ве)Г) 1еп(у) гвчвгвео(у) Возвращает число элементов в у Возвращает итератор, выполняю- щий обход элементов последова- тельности у или ключей отображе- ния у в обратном порядке вет1тев (ве1(, к, ч) у(к) = ч Устанавливает К-й элемент последовательности у или значение элемента с ключом К в отображении ч Если пользователь устанавливает значение цвета, равное значению цвета фона, мы просто удаляем соответствующий элемент словаря, поскольку отсутствие тех или иных координат в словаре означает, что пиксели с этими координатами имеют цвет фона.

Вместо инструкции бе1 следует использовать метод б1ст. рор() и передавать ему фиктивный второй аргумент, чтобы избежать возбуждения исключения КеуЕ г го г, если указанный ключ (координаты) отсутствует в словаре. Собственные классы коллекций Если цвет отличается от цвета фона, мы устанавливаем его как значение элемента с заданными координатами и добавляем его в множество уникальных цветов, используемых в изображении. се! се1!теэ (ве1(, соосс!пате): авввг! 1ел(соогс!пате) == 2, "сов<с!пате влоч10 ье а 2-тчр1е" !т (по! (О <= соогс!пате[О) < ве1т.н!Оть) ог по! (О <= свете!пате[!) < ве!т.ье!дь!)): га!ве Ооотс!патеЕггог(втг(соогс!лате)) ве1т.

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

серг () базового класса вернет строку вида '<1ззде.!заде оЬ)ес! а! Ок9с794зс>'. Это стандартный формат представления объектов, которые не могут быть созданы функцией ечз1(). Шестнадцатеричное число — это числовой идентификатор объекта, который является уникальным (обычно это адрес объекта в памяти), но не фиксированным значением. Нам необходимо предоставить пользователям класса 1ааде возможность сохранять изображения на диск и загружать их с диска, поэтому мы предусмотрели реализацию двух методов — варе() и 1оае(), выполняющие эти действия. Чтобы сохранить данные на диск, мы будем выполнять их консервирование.

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

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

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

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