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

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

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

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

В файле ЯЬареАл.ру представлена альтернативная реализация классов Ротпт и С1гс1е, где все упомянутые методы представляются как свойства. Это позволяет нам писать программный код, как показано ниже: стгс1е = 5пвре.стгс1е(5, 28, 45) в предполагается, нто модуль 5пвреА1т в был имлортироввн под именем 5лвре стгс1е.глотов Л вернет: 5 стгс1е.ебде б!втвлсе Ггов ог!дтп В вернет: 48.0 Ниже приводится реализация методов чтения для свойств агеа и ебде бтвтвпсе Ггоэ огтд!п класса 5дареА11,С!гс1е: Собственные классы 289 ергорегсу Пет агеа(ве11); геспгп засп.рс * (ве1г.галс»в * 2) Зргорегсу Пет езде с!в!ассе Ггов ог!ц!п(ве11): гетигп апв(ве1(.П!зтапсе Ггсп ог!ц1п - ве1с.газ!ив) Если мы реализуем только методы чтения, как это было сделано здесь, свойства будут доступны только для чтения.

Программный код реализации свойства агеа остался тем же самым, что и в реализации метода агеа(). Программный код реализации свойства езде о!в!апре тгов огсд1п несколько изменился, потому что теперь он обращается к свойству г)свсвпсе ггоа огсдсп базового класса, а не к методу г)!в!ассе тгов огсц ! и( ) .

Самое заметное отличие между реализациями заключается в наличии декоратора ргорегСу. Декоратор — это функция, которая в качестве аргумента принимает функцию или метод и возвращает «декорированную» версию, то есть версию функции или метода, измененную некоторым способом. Декоратор обозначается первым символом «б» в имени. Пока просто воспринимайте декораторы как элемент синтаксиса — в главе 8 будет показано, как можно создавать собственные декораторы.

Функция-декоратор ргорегсу() — зто встроенная функция, и она может принимать до четырех аргументов: функцию чтения, функцию записи, функцию удаления и строку документирования. Фактически использование имени Зргорегту равносильно вызову функции ргорегту() с единственным аргументом — функцией чтения.

Мы могли бы создать свойство агеа, как показано ниже: Пет агеа(ве1Г); ге!игл пасл.рс ° (ве1т.газ!па * ° 2) агеа = ргорегСу(агеа) Мы редко используем такой синтаксис, потому что использование декоратора выглядит короче и понятнее. В предыдущем подразделе мы отмечали отсутствие проверки значений, записываемых в атрибут гаг)1рв класса С1гс1е. Мы можем реализовать такую проверку, преобразовав атрибут гад!за в свойство.

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

Это обусловлено тем, что атрибут данных очень легко можно превратить в свойство, что никак не скажется на программном коде, использующем класс. 290 Глава 6. Объектно-ориентированное программирование Чтобы превратить атрибут в свойство, доступное для чтения и записи, нам необходимо создать частный атрибут, который будет являться фактическим хранилищем данных и будет использоваться методами чтения и записи.

Ниже приводится полная реализация методов чтения и записи, а также строка документирования: ергсрегту бет габшв(зе1Г): """Радиус окружности »> с1гс1е = С(гс1е(-2) Тгасеваск (аозт гесепт са11 1авт): Аввегттопеггог; габтов аозт ье поптегп апб поп-пвда(1че »> с1гс1е = С(гс1е(4) »> стгс1е.габ1ов = -1 тгасеьаск (аозт гесепт сап 1авт); Аввегтшпеггсг, габ1ов аом ье псптего апб поп-педат1че »> с1гс1е.габ(ов = 6 гетогп ве1Г. габ1оз Згабтоз.веттег бет габ1ов(ве1(, габ(ов): азвегт габ1оз > О, "габ1ов аозт Ье попаегс апб поп-педат1че" ве1Г.

габюв = габ1ов Чтобы убедиться, что записываемое значение радиуса больше нуля, используется инструкция авве гт; после проверки значение радиуса сохраняется в частном атрибуте ве11. габ1оз. Примечательно, что методы чтения и записи (и метод удаления, если бы он нам потребовался) имеют одно и то же имя — они отличаются только декораторами, и декораторы соответствующим образом переименовывают методы, чтобы исключить конфликты имен. Декоратор метода записи может показаться немного необычным на первый взгляд. Каждое создаваемое свойство имеет атрибут деттег, веттег или бе1етег, поэтому, как только свойство габтоз будет создано, появятся атрибуты габ1ов.деттег, габтоз.зЕттвг и габшв.бе1етег.

В атрибут габ!ов. деттег декоратором Зргорегту записывается ссылка на метод чтения. Другие два атрибута устанавливаются интерпретатором так, что они ничего не делают (поэтому в атрибут ничего нельзя записать или удалить его), если они не были использованы как декораторы; тогда они замещаются декорируемыми ими методами. Метод инициализации С1гс1е. Тп11 () содержит инструкцию зе11. габтов = габтов. При выполнении она превратится в вызов метода записи для свойства габтов, поэтому, если при создании объекта С1гс1е будет указано недопустимое значение, будет возбуждено исключение Авзегт! опЕг гог. Точно так же, если будет произведена попытка установить недопустимое значение свойства габ!оз у существующего объекта Собственные классы 291 класса С(го1е, снова будет вызван метод записи, который возбудит ис- ключение. Строка документирования включает в себя доктесты, про- веряющие корректное возбуждение исключений в этих случаях.

Типы Ро)пс и С1гс1е являются нашими собственными типами данных, обладающими достаточным объемом функциональных возможностей, чтобы быть полезными. Большинство типов данных, которые нам придется создавать, будут похожи на эти типы данных, но иногда будет возникать необходимость в самостоятельном создании собственного полного типа данных. Пример такого типа данных мы увидим в следующем подразделе. Создание полных и полностью интегрированных типов данных В создании полного типа данных можно пойти двумя путями. Первый состоит в том, чтобы создать тнп данных с самого начала. Хотя тип данных будет наследовать класс ОЬ)ес( (как и любой другой класс Ру- 1)топ), тем не менее придется реализовать все атрибуты данных и методы (за исключением метода пеи ()).

Другой путь состоит в том, что наследовать существующий тип данных, напоминающий тот, что мы собираемся создать. В этом случае основная работа обычно связана с переопределением тех методов, поведение которых необходимо изменить, и с «ликвидацией» тех методов, которые вообще являются нежелательными. В следующем подразделе мы реализуем тип данных ЕогауВОО1, начав с нуля, а в подразделе, следующем за ним, мы реализуем тот же самый тип данных, но при этом воспользуемся механизмом наследования, чтобы уменьшить объем работы, которую необходимо выполнить. Встроенный тип Ьоо1 имеет два возможных значения (Тгое и Еа1зе), но внекоторых областях ИИ (искусственный интеллект) используется нечеткая логика, опирающаяся на значения, соответствующие понятиям «истина» и «ложь», а также на промежуточные между ними.

В наших реализациях мы будем использовать значения с плавающей точкой, где 0.0 будет соответствовать значению Еа1зе, а 1.0 — значению Тгое. В этой системе координат значение 0.5 будет обозначать 50-процентную истинность, 0.25 — 25-процентную истинность и т. д. Ниже приводятся несколько примеров использования (они работают совершенно одинаково с любой из двух реализаций): а = ЕоаауВоо1,ЕогауВоо1(,875) Ь = ЕоавуВоо1.ЕогауВоо1( 25) а >= Ь Ьоо1(а), Ьоо1(Ь) -а аао Ь )= ЕоавуВоо1.ЕоавуВаа1(.5) "а=(0: пй ь=(7:.ОВ)".(огаат(а, а вернет: тгое а вернет; (Тгое, Еа1зе) в вернет: еоззуВоо1(0. 125) а вернет: Еоггузоо1(0.25) а тапер» ь ииеет значение еогзуВоо1(0.5) Ь) а вернет: 'а=87 5% о=50%' 292 Глава б.

Объектно-ориентированное программирование Нам необходимо, чтобы тип ЕсттуВ001 поддерживал полный набор операторов сравнения («, =, ==,! =, » ) и три основные логические операции: НЕ (-), И (В) и ИЛИ (1). В дополнение к логическим операциям нам необходимо реализовать пару других логических методов — соп)ппст!оп() и 010)спет(оп(), способных принимать произвольное число значений типа ЕсггуВ001 и возвращающих соответствующие результаты типа ЕсгауВ001.

И для полноты типа нам потребуется реализовать возможность преобразования в типы 0001, тпт, г1оат и вт г, а также обеспечить получение репрезентативной формы, совместимой с функцией еча1(). Наконец, тип ЕсггуВ001 должен поддерживать спецификаторы формата метода вт г. гогват(), он должен иметь возможность использоваться в качестве ключей словаря или членов множеств, значения типа ЕстгуВ001 должны быть неизменяемыми, прн условии поддержки комбинированных операторов присваивания (В= н ~=), чтобы обеспечить дополнительные удобства в использовании. В табл. 6.1 (стр. 283) перечислены специальные методы операций сравнения, в табл.

6.2 (стр. 294) перечислены фундаментальные специальные методы и в табл. 6.3 (стр. 296) перечислены арифметические специальные методы, включая методы реализации битовых операторов (-, В и ~ ), которые применительно к типу ЕыгуВ001 играют роль логических операторов, а также арифметические операторы ч и —, которые в типе ЕсагуВ001 не будут реализованы, как не имеющие смысла.

Создание типов данных с нуля Создание типа данных ЕсгвуВ001 с нуля означает, что мы должны создать атрибут для хранения значения типа ЕсгтуВ001 и все необходимые методы. Ниже приводится инструкция 01авв и метод инициализации, взятые из файла УиггуВ 001.ру: с1авв Епкгувоо1: сет тп1т (ве1т, <а1ие=0.0); ве1б ча1ое = ча10е тт 0.0 <= та1пе <= КО е1ве 0.0 Мы сделали атрибут частным, потому что нам необходимо, чтобы тип ЕсаауВ001 вел себя как неизменяемый объект, для которого было бы неправильно разрешать прямой доступ к атрибуту. Кроме того, если в аргументе уа10е получено число, находящееся вне диапазона допустимых значений, мы принудительно замещаем его значением по умолчанию 0.0 (ложь). В предыдущем подразделе, в классе ВларвЯ11. С1гс1е, мы использовали политику строгого ограничения, возбуждая исключение прн получении недопустимых значений радиуса во время создания нового объекта С(гс1е.

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

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

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

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