Главная » Просмотр файлов » Лутц М. - Изучаем Python

Лутц М. - Изучаем Python (1077325), страница 143

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

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

666 Глава 2б. Дополнительные возможности классов На сегодняшний день все это пока так и есть. Однако Ру()топ поддерживает такое понятие, как «искажение» («тапя11пя») имен (то есть расширение), с целью придать им черты локальных имен класса. Искаженные имена иногда ошибочно называют частными атрибутами, но в действительности это всего лишь способ ограничить доступ к именам в классе — искажение имен не предотвращает доступ из программного кода, находящегося за пределами класса.

Эта особенность в основном предназначена, чтобы избежать конфликтов имен в экземплярах, а не для ограничения доступа к именам — поэтому искаженные имена лучше называть «псевдочастными», чем «частными». Псевдочастные имена — это совершенно необязательная возможность и вы, скорее всего, не найдете в ней особого смысла, пока не начнете писать крупные иерархии классов в проектах, над которыми трудятся несколько программистов. Но так как использование этой возможности может встретиться в программном коде других программистов, вам следует знать о ней, даже если вы сами не используете ее.

Об искажении имен в общих чертах Здесь описывается, как действует искажение имен: имена внутри инструкции с1звз, которые начинаются с двух символов подчеркивания, но не заканчиваются двумя символами подчеркивания, автоматически расширяются за счет включения имени вмещающего класса. Например, такое имя как Х в классе с именем Ярве автоматически изменится на Ярве Х: к оригинальному имени будет добавлен префикс, состоящий из символа подчеркивания и имени вмещающего класса, и в результате будет получено достаточно уникальное имя, которое не будет вступать в конфликт с именами в других классах иерархии. Искажение имен происходит только внутри инструкций с1авв и только для имен, которые начинаются двумя символами подчеркивания.

Однако это происходит со всеми именами, которые начинаются двумя символами подчеркивания, включая имена методов и имена атрибутов экземпляров (например, в нашем примере с классом Ярав ссылка на атрибут экземпляра ве1(. Х будет преобразована в ве1( Ярве Х). Поскольку экземпляр может получать атрибуты более чем из одного класса, такое искажение позволяет избежать конфликтов, но чтобы понять, как это происходит, нам нужно рассмотреть пример. Для чего нужны псевдочастные атрибуты? Задача, которую призваны решить псевдочастные атрибуты, состоит етом, чтобы обеспечить способ сохранения атрибутов экземпляра. В языке Ру«Ьоп все атрибуты экземпляра принадлежат единственному объекту экземпляра, расположенному внизу дерева наследования. Это существенно отличается от модели языка С++, где каждый класс обладает своим собственным набором членов данных, которые он определяет.

Псевдочастные атрибуты класса 667 В языке Руь)топ всякий раз, когда в пределах метода класса выполняется присваивание атрибуту аргумента яе1( (например, яе18. атт г = уа1се), создается или изменяется атрибут экземпляра (поиск в дереве наследования выполняется только при попытке получить ссылку, а не присвоить значение).

Это верно, даже когда несколько классов в иерархии выполняют присваивание одному и тому же атрибуту, поэтому конфликты имен вполне возможны. Например, предположим, что, когда программист писал класс, он предполагал, что экземпляры этого класса будут владеть атрибутом Х. В методах класса выполняется присваи ванне этому атрибуту и позднее извлекается его значение: с1аы С1: оет веты(яе11): яе1г.х = 88 д предполагается, что х - это ной атрибут бег ветп2(яе11): ргчпт яе!Г.Х Далее предположим, что другой программист, работающий отдельно, исходил из того же предположения, когда писал свой класс: с1аяя С2: оет ветла(яе11): яе1т.х = 99 й и иой тоже сет ветле(яе)т): ргпп яе1т.х Каждый класс по отдельности работает нормально. Проблема возника- ет, когда оба класса оказываются в одном дереве наследования: с1аы СЗ(С1, С2): 1 = СЗ() й У иена только один атрибут Х( С1дяя С1' Се( ве(Ы(яе1т): яе11.

Х = 88 оет ветп2(яе1(): ргтпт яе)т, й гелер~ К - иой атрибут й Превратится е Ст К с1аяя С2; Оет ее(па(яе11); яе11. Х = 99 бе( вессс(яе11); рг(пт яе11. Х й 0 иой тоже д Превратится в С2 Х с1аяв СЗ(С1, С2): раы 1 = СЗ() й У пеня два ииени Х 1.ветЫ (); 1.ватна() ргтпт 1. О1ст 1.ветп2(); 1.ветпс() Теперь значение, которое получит каждый класс из выражения яе1(. Х, будет зависеть от того, кто из них последним присвоил значение. Все операции присваивания атрибуту яе1(. Х будут воздействовать на один и тот же экземпляр, у которого может быть только один атрибут Х вЂ” 1, Х— независимо от того, сколько классов используют это имя.

Чтобы гарантировать принадлежность атрибута тому классу, который его использует, достаточно в начале имени атрибута поставить два символа подчеркивания везде, где оно используется классом, как в следующем файле ртшате.ру: 668 Глава 2б. Дополнительные воэможности классов При наличии такой приставки имена атрибутов Х будут дополнены именами их классов, прежде чем будут добавлены в экземпляр, Если вызвать функцию с1г, чтобы просмотреть перечень атрибутов экземпляра 1, или просмотреть содержимое его словаря пространства имен после того, как атрибутам будут присвоены значения, можно увидеть измененные имена Ст Х и С2 Х, но не Х.

Такое дополнение придаст именам уникальность внутри экземпляра, поэтому разработчики классов могут рассчитывать на то, что все имена, начинающиеся с двух символов подчеркивания, действительно принадлежат их классам: % рутвол рмувтв,ру Г С2 Х'. 99, ' С1 Х'.

'88~ 88 99 Этот прием помогает избежать конфликтов имен в экземплярах, но заметьте, что он не обеспечивает настоящего сокрытия данных, Если вы знаете имя атрибута внутри класса, вы сможете обратиться к нему из любой точки программы, где имеется ссылка на экземпляр, используя для этого расширенное имя (например, 1. Ст Х = 77). С другой стороны, эта особенность делает менее вероятным, что вы случайно вступите в конфликт с существующими именами в классе.

Еще раз отмечу, что эта особенность более полезна для крупных проектов, в которых участвует несколько программистов, и только для отдельных имен. Не торопитесь загромождать свой программный код лишними символами без нужды — используйте эту особенность, только когда действительно необходимо обеспечить принадлежность атрибута единственному классу. Для простых программ этот прием будет излишеством. о Кроме того, посмотрите, как имитируется сокрытие атрибутов в главе 24, в разделе с описанием метода 9етаттг, Несмотря ва то, что в языке Рутйоп вполне возможно организовать управление доступом к атрибутам классов, тем не менее, этот прием редко используется ва практике, даже в крупных программах.

Классы нового стиля В версии Ру$1топ 2.2 появилась новая разновидность классов, известная как классы»нового стиля». Классы, рассматривавшиеся до сих пор в этой части книги, называют»классическими классами», когда сравнивают их с новой разновидностью. Классы нового стиля лишь немного отличаются от классических классов, и эти отличия совершенно незаметны для подавляющего большинства пользователей РуФЬоп. Кроме того, классическая модель классов, используемая в языке Ру11топ на протяжении последних 16 лет, по- прежнему работает именно так, как было описано выше. 669 Классы нового стиля С1ЗЗЭ ПеыэтУ1Е(ОЬ1ЕСт); ...обычная реализация класса...

Если говорить более широко, любой класс, наследующий ЬЬ)ест или любой другой встроенный тип, автоматически будет рассматриваться как класс нового стиля. (Под наследованием я подразумеваю все подклассы оЬ)ест, подклассы подклассов оЬ)есс, и т. д. — если где-то в дереве наследования в качестве суперкласса присутствует встроенный тип, класс-наследник будет рассматриваться как класс нового стиля.) Классы, не наследующие встроенные типы, считаются классическими. (.") Согласно утверждениям Гвидо зав Россума (Опсбо цап Воззшп), создателя языка Русьоп, начиная с версии Рутьоп З.О все классы автоматически будут считаться классами нового стиля, поэтому требование наследования встроенных типов отпадет автоматически.

Даже самостоятельные классы будут считаться классами нового стиля, к тому же классы нового стиля сохранят обратную совместимость с классическими классами, поэтому для большинства программистов эти изменения будут малозаметны. В прошлом имелось некоторое беспокойство, что в Рузлоп З.О классы верхнего уровня необходимо будет наследовать от ЬЬ1ест.

Однако недавно Гвидо (Ошс)о) заявил, что этого ве потребуется. Для большинства программистов зсе классы з версии 3.0 будут работать так, как описывается в этой книге, во с некоторыми новыми особенностями, свойственными классам нового стиля. Тем ве менее, я не берусь предсказывать будущее, поэтому за дополнительной информацией обращайтесь к примечаниям к выпуску 3,0. Ромбоидальное наследование Пожалуй, самым ощутимым изменением в классах нового стиля является немного отличная интерпретация наследования — так называемая ролтбоидальная схема в деревьях множественного наследования, когда более одного суперкласса паоле 1т от один и тот же суперкласс более высокого уровня.

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

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

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

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

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