Python управление атрибутами - Студенческий научный форум

XIV Международная студенческая научная конференция Студенческий научный форум - 2022

Python управление атрибутами

 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

Python (произносить лучше "питон", но некоторые произносят "пайтон"). Создателем этого языка программирования является Гвидо ван Россум родом из Голландии.

История создания языка Python

Гвидо ван Россум (Guido van Rossum) прославился благодаря созданию одного из самых простых языков программирования на сегодня, Python. Сама идея создания языка Python, по словам самого автора, пришла совершенно случайно. В 1989 году в декабре Гвидо искал проект, который мог бы стать хобби на время зимних каникул. Все необходимое оборудование было в офисе, но он не работал. Не имея необходимых ресурсов Гвидо стал обрабатывать АВС, но даже не мог предположить, что сможет по итогу получить что-то серьезное.

Рис 1. Создатель языка Python.

Характеристики языка Python

Python - это интерпретируемый, объектно-ориентированный язык высокоуровневого программирования. Что делает этот язык таким привлекательным? Однозначно это интегрированные высокоуровневые структуры информации, которые сочетаются с динамической типизацией и связыванием. Все это помогает быстро разрабатывать приложения.

Кроме этого, язык Python можно использовать в качестве языка сценария для связи компонентов программы. Синтаксис языка в изучении очень прост, читаемости кода придается особое значение в нем. Также он поддерживает пакеты и модули, поощряя повторное применение кода и модульность. Большая стандартная библиотека и интерпретатор доступны в Интернете бесплатно в виде исполняемых и исходных кодов для всех ключевых платформ.

Стандартная и обширная библиотека входит в поставку языка Python для решения просторного сферы задач. В общем доступе в Интернете так же доступны библиотеки для языка по разнообразным предметным областям: обработка изображений, средства для обработки технологии Интернет и текстов, механизмы доступа к базам данных, инструменты создания приложений, пакеты для научных вычислений, библиотеки построения графического интерфейса и многое другое.

Кроме того, язык Python обладает довольно несложными средствами для интеграции с такими языками как C, Java , C++ путем встраивания интерпретатора в программы, и наоборот, путем использования библиотек, в Python-программах, написанных на этих языках. Язык поддерживает несколько парадигм программирования: функциональное и императивное объектно-ориентированное программирование.

Можно считать, что язык Python - это целая технология для создания программных продуктов. Ведь она доступна практически на всех нынешних платформах с компилятором C и на платформе Java.

Например, приведем самые крупные и известные организации, которые используют данный язык: Google.com , Yahoo!, CBS Market Watch , IBM, NASA, Microsoft, Red Hat, Hewlett Packard, Infoseer.

Настало время рассмотреть плюсы языка:

Интерпретатор адаптирован почти для всех операционных систем и платформ;

есть возможность для улучшения языка всеми программистами, которые заинтересованы;

наличие просторного набора модулей, которые подключаются к программе и обеспечивают дополнительные возможности;

использование стандартной библиотеки позволяет использовать сторонние решения;

функционал сайтов на языке Python ограничен только фантазией клиента. И, как правило, разработка самых трудоемких решений занимает меньше времени, чем на иных языках.

Рассмотрим минусы:

скорость выполнения программ, которые написаны на языке Python, уступает скорости программ, написанных на компилирующий языках программирования, таких как С или С++.

Стоит ли в 2022 учить Python?

Язык Python не один раз удостаивался звания «Язык года» и находился в рейтинге с момента его выпуска самой первой версии. За эти 20 лет он был почти всегда в топ-10 (лишь в 2013 году в феврале опустился на 13 место).

Компания Tiobe, которая оценивает языки, по степени популярности среди программистов заявила, что в окбяре 2021 года язык Python впервые добрался до первого места. Основными конкурентами Python являются С и Java.

Рис 2. Рейтинг языков за 2021 год.

Сотрудники компании Tiobe, которые составляли рейтинг, учитывали слова во множествах запросах пользователей. Они берут их у крупнейших поисковиков в мире, таких как Bing, Google и т. д., а также на самых популярных сайтах на всей планете.

Управляемые атрибуты

Давайте постараемся ответить на вопрос «зачем нужно управлять атрибутами? Атрибуты объектов занимают центральное положение в большинстве программ на Python – они хранят информацию об объектах или процессах, проходящих в сценарии. Обычно атрибуты представлены несложными именами объектов – атрибут name, например, может быть легкой строкой, получить и поменять значение которой возможно с использованием обычного синтаксиса обращения к атрибутам:

Рис 3. Синтаксис обращения к атрибутам.

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

Впрочем порой необходимо обеспечить побольше гибкости. Предположим, что вы написали программу, которая обращается к атрибуту name непосредственно, но затем вам потребовалось поменять ее, например, добавить логику проверки имен при присваивании атрибуту или обеспечить получение измененного имени при обращении к нему. Контроль и преобразование в образце далее исполняются абстрактно:

Рис 4. Пример 1 «Обращения к атрибуту name».

При таком раскладе необходимо помнить, как экспортируются значения: как простые значения или как вызовы методов. Если вы запомните это и используете интерфейс доступа к данным на основе методов, клиенты будут защищены от изменений.

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

В частности, в этой статье будут затронуты такие темы, как:

__getattr__ и __setattr__ методы, которые вызываются при обращении к несуществующим атрибутам и при присваивании значений любым атрибутам.

__getattribute__ метод, который вызывается при обращении к любым атрибутам в классах нового стиля в Python 2.6 и во всех классах в Python 3.0.

Функция property, которая позволяет определить для отдельных атрибутов методы чтения и записи.

Свойства

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

Такие свойства формируются встроенной функцией property и присваиваются атрибутам классов. Кроме того, свойства могут наследоваться экземплярами и подклассами, как и любые иные атрибуты данного класса. Функциям передается образец в виде аргумента self, это и гарантирует доступ к информации о состоянии объекта и к атрибутам класса.

Основы

Свойство создается операцией присваивания атрибуту класса результата, возвращаемого встроенной функцией:

Рис 5. Функция property.

Ни один из аргументов данной функции не является обязательным, и все они приобретают значение None по умолчанию. Когда некоторый аргумент опущен, это означает, что соответствующая ему операция не поддерживается, а попытка реализовать ее приводит к исключению. В аргументе fget передается функция, которая будет вызываться при попытке прочитать значение атрибута, в аргументе fset – функция, которая будет вызываться при попытке выполнить операцию присваивания, и в аргументе fdel – функция, которая будет вызываться при попытке удалить атрибут. А уже в аргументе doc передается строка документирования с описанием атрибута.

Далее рассмотри пример, как следующий класс использует свойство для управления доступом к атрибуту с именем name, благодаря чему исключается возможность конфликта с именем свойства:

Рис 6. Пример 2 «Класс Person».

Эти свойства доступны в обеих версиях Python 2.6 и 3.0. Но в версии 2.6 необходимо, чтобы класс наследовал класс object для корректной работы операций присваивания.

Если мы запустим данный пример, то он создаст два экземпляра, которые унаследуют свойство, как любой другой атрибут, присоединенный к классу.

Рис 7. Результат работы примера 2.

Если изменить пример, как показано ниже:

Рис 8. Изменения примера 2.

То он выведет те же самые результаты – подкласс Person унаследовал свойство name от класса Super, а экземпляр bob получил его от класса Person.

Вычисляемые атрибуты

В прошлом примере мы просто вывели сообщения при обращении к атрибуту. Хотя обычно свойства реализуют более полезные действия, например, динамически вычисляют значение атрибута при обращении к нему. Эту возможность можно пронаблюдать в следующем примере:

Рис 9. Пример 3 «Класс PropSquare».

Класс PropSquare описывает атрибут X, к которому можно обращаться, как если бы это был атрибут со статическими данными, но в действительности вычисляет значение этого атрибута в момент обращения к нему. Этот эффект напоминает неявный вызов метода. Фрагмент в процессе работы сохранит в экземпляре изначальное значение, а потом, при каждой попытке обратиться к управляемому атрибуту, его значения автоматически возводятся в квадрат:

Рис 10. Результат примера 3.

Определение свойств с помощью декораторов

Рассмотрим синтаксис декораторов функций ниже:

Рис 11. Синтаксис декораторов функций.

Он автоматически преобразуется интерпретатором в следующую конструкцию. Она повторно присваивает имени функции результат вызова декоратора:

Рис 12. Декоратор имени функции.

Функция property может играть роль декоратора из-за данной особенности. Функция автоматически будет вызываться при попытке получить значение атрибута:

Рис 13. Функция property как декоратор.

В течении исполнения декорируемый метод автоматически передается функции property в первоначальном аргументе. Это лишь другой синтаксис конструкции, который создает свойство и повторно осуществляет присваивание имени атрибута вручную. Рассмотрим ниже:

Рис 14. Интегрированная функция property.

Объекты свойств (начиная с версии Python 2.6) обладают методами getter, setter и deleter. Они присваивают соответствующие методы доступа к свойству и возвращают копию самого свойства. Мы можем использовать эти методы, чтобы определить компоненты свойств:

Рис 15. Пример 4.

Фактически данный код программы эквивалентен примеру 1. В данном случае декорированием можно назвать другим методом определения свойств. Если запустить этот пример, он выведет те же результаты:

Рис 16. Результат примера 4.

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

Методы __getattr__ и __getattribute__

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

Операция чтения значения атрибута может быть перехвачена с помощью двух различных методов:

1.Метод __getattr__ вызывается при обращении к неопределенным атрибутам – то есть к атрибутам, которые отсутствуют в экземпляре или в наследуемых им классах.

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

Данные два метода входят в состав множеств других методов управления доступом к атрибутам, в число которых также входят методы __setattr__ и __delattr__.

Помимо того, методы __getattr__ и __getattribute__ дозволяют реализовать более обобщенный способ управления атрибутами, чем свойства и дескрипторы – они могут использоваться для управления чтением любых атрибутов экземпляра. Вследствие подобной специфики данные два метода прекрасно идут для реализации шаблона делегирования.

Скажем вкратце, если класс описывает или наследует следующие методы, то они будут вызываться автоматически. Случаи описываются в комментариях справа:

Рис 17. Синтаксисы методов __getattr__, __getattribute__, __setattr__, __delattr__.

Во всех этих случаях в аргументе self, передается объект экземпляра, в аргументе name – строка с именем атрибута, к которому выполняется доступ, а в аргументе value – объект, приписываемый атрибуту. Два метода get обычно возвращают значение атрибута, а два других – значение None.

В заключение

В этой статье мы рассмотрели разные методы управления доступом к атрибутам в языке Python, включая методы перегрузки операторов __getattr__ и __getattribute__. Заодно сопоставили данные инструменты и рассмотрели несколько примеров, которые показывают особенности поведения.

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

Библиографический список

Лутц М. Изучаем Python, 4-е издание. – Пер. с англ. – СПб.: Символ-Плюс, 2011. – 1280 с., ил. ISBN 978-5-93286-159-2 URL: https://codernet.ru/books/python/izuchaem_python_4-e_izdanie_mark_lutc/(датаобращения:05.12.2021)

Язык программирования Python, Введение в программирование на языке Python.URL: https://intuit.ru/studies/courses/49/49/lecture/27058(датаобращения:05.12.2021)

Актуальность языка программирования PythonURL: https://readera.org/140116346 (дата обращения: 05.12.2021)

Биография Гвидо ванн Россум, Голландский программист, создатель PythonURL: http://facecollection.ru/people/gvido-van-rossum (дата обращения: 04.12.2021)

Python. У языков программирования революция. Сменился самый популярный язык в миреURL: https://www.cnews.ru/news/top/2021-10-11_tsel_dostignutapython_vpervye (дата обращения: 06.12.2021)

Язык программирования Python в 2021 году URL: https://brunoyam.com/blog/programmirovanie/vse-pro-python-v-2021 (дата обращения: 06.12.2021)

Просмотров работы: 17