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

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

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

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

6.1.) Встроенная функция (втпвтапсе() принимает объект и класс (или кортеж классов) и возвращает Тгпе, если объект принадлежит данному классу (или одному из классов, перечисленных в кортеже) или одному из базовых классов указанного класса (или одного из классов, перечисленных в кортеже). 285 Собственные классы Встроенная функция герг() вызывает специальный метод герг () указанного объекта и возвращает его результат.

Возвращаемая строка может быть одного из двух видов. Один вид — когда возвращаемая строка с помощью функции еув1() может быть преобразована в объект, эквивалентный тому, что был передан функции герг(). Второй вид используется, когда такое преобразование невозможно. Примеры таких ситуаций будут показаны позднее. Ниже показано, как можно выполнить преобразование объекта Рот пс в строку и обратно — в объект Рот пт: о Мвтад втг. тогивт(), стр. 100 р = 3Пврв.Ротпт(3, 9) герт(р) и вернет; 'Ротпт(3, 9)' ц = еув1(р, воси1в + "." + герт(р)) гврг(П) я вернет.

'Ротпт(3, 9)' При вызове функции еуа1() мы должны передать имя модуля, если использовалась инструкция тирогт 9ларе. (Это не требуется, если импортирование выполнялось иным способом, например, тгоа Бларе (ерогт Ро(пт.) Каждому объекту интерпретатор Ру0)топ присваивает несколько частных атрибутов, один из которых эо001е строка, хранящая имя модуля объекта, в данном случае "9паре".

о Инструкция тирогт, стр. 230 После выполнения этого фрагмента в нашем распоряжении будет два объекта класса Ро(пт, р и ц, с одинаковыми значениями атрибутов, поэтому операция сравнения говорит о том, что они равны. Функция еуа1() возвращает результат выполнения переданной ей строки, которая должна содержать допустимую инструкцию языка Ру- 1)топ. ЕЕГ Втг (ВЕ1(): гвтцгп "((О.х!г), (О.у!г))".тогеат(ве1т) Встроенная функция вс г( ) работает точно так же, как функция гер г(), за исключением того, что она вызывает специальный метод втг () объекта.

Результатом работы этого метода должна быть строка, предназначенная для восприятия человеком и которую не предполагается передавать функции еуа1(). Коли продолжить предыдущий пример, вызов 31г(р) (или в( г(ц)) вернул бы строку ' (3, 9) '. Мы закончили рассмотрение простого класса Рот пт, а также некоторых подробностей, которые важно знать, но не обязательно применять на практике. Класс РО1пт хранит координаты (х, у) — важную часть данных, необходимых для представления окружностей, с которых мы начали эту главу. В следующем подразделе будет показано, как создать собственный класс Стгс10, наследующий класс РО1пт, чтобы нам не 266 Глава б. Объектно-ориентированное программирование приходилось дублировать программный код, создающий атрибуты х и у или метод О!втапсе т газ ог!О!и().

Наследование и полиморфизм Класс С1гс1е построен на основе класса Ро1пт, с использованием механизма наследования. Класс Стгс1е добавляет один атрибут данных (гз01св) и три новых метода. Кроме того, он переопределяет несколько методов класса РО1п!. Ниже приводится полное определение класса: с1авв Стгс1е(Ро!пт): сет !011 (ве1Г, гвсшв, х=с, у=с): вврег(). !птт (х, у) ве1(,гастев = гастев се( есзе Отжапсе ггое сгтс!п(ве1г); ге!игл авв(ве1(.ствтапсе (гоп огтз!и() - ве1(.гвсввв) сет агеа(ве1(); ге!вгп еатв.рт * (ве1(.гастев * ° 2) Оет с!гсветегепсе(ве1(): ге!вгп 2 ° еатп,р; ве1(.гас!юв Оет ее (ве1(, сжег). ге!игл ве1(.гас!Ов == с!пег,гас(шв ап0 вирег(), ес (о!пег) Оет герг (ве1Г): гетпгп "С(гс1е((О, гас(ив' г), (О, х! г), (О, у' г) ) ".

Гогзат(ве1() Оет втг (ве)Г): гетвгп герг(ве1Г) Наследование реализуется просто, посредством перечисления класса (или классов), который должен быть унаследован нашим классом, в строке с инструкцией с1авв.' В данном случае мы наследуем класс Ро1п! — иерархия дерева наследования класса С1гс1е приводится на рис. 6.3. Внутри метода тп!т () мы используем функцию ворег() для вызова метода ! и !1 ( ) базового класса — он создает и инициализирует атрибуты ве1(. х и ве1(. у. Пользователи класса могут попытаться определить недопустимое значение радиуса, например — 2.

В следующем подразделе мы покажем, как предотвратить появление этой проблемы, для повышения устойчивости атрибутов используя свойства. Методы агеа() и с!гссв!егепсе() достаточно очевидны. Метод есре Отвтзпсе тгсе ог!О!п() в ходе производимых вычислений вызывает метод О!в!злее Ггоз ог1О!и(). Так как класс С!гс1е не реализует свой метод Множественное наследование, абстрактные типы данных и другие, более сложные приемы объектно-ориентированного программирования рассматриваются в главе 8, Собственные классы 287 Рис. 6.3. Дерево наследования класса С( гс!е С!а!апре ггсв ог!д!и(), интерпретатор найдет и будет использовать метод базового класса Ро!пт.

Сравните это с переопределением метода ео (). Этот метод сравнивает радиус окружности с радиусом другой окружности, и если они равны, то при помощи функции аорег() явно вызывается метод ес () базового класса. Если бы мы не использовали функцию еорег(), мы могли бы попасть в бесконечную рекурсию, поскольку метод С(гс)е, ео () продолжал бы вызывать сам себя. Обратите также внимание на то, что в вызов асрег() мы не передаем аргумент ае!г, потому что интерпретатор сделает это автоматически. Ниже приводится пара примеров использования: р = Янаре. Ро1пт(25, 45) с = 5паре.С1гс1е(5, 25, 45) р.с!атапсе ггое огтдтпО с.с1жапсе ггов ог19тпО е вернет: 53.9 В вернет: 53.0 Полиморфизм подразумевает, что любой объект данного класса может использоваться, как если бы это был объект любого из базовых его классов. По этой причине, когда создается подкласс, нам требуется реализовать только необходимые дополнительные методы и переопределить только те существующие методы, которые нам хотелось бы заменить.

Переопределяя методы, мы можем в случае необходимости использовать реализацию базовых классов, применяя функцию зорег() внутри переопределяемых методов. Мы можем вызвать метод 913!апре (гса сг191п() как для экземпляра класса Рс1пт, так и для экземпляра класса С(гс!е, потому что класс С(гс!е наследует класс Ротпт. 288 Глава б.

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

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

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

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

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

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

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