Магические методы: секрет элегантного кода питона

Есть способ, чтобы объекты Python ведут себя и читать больше как реальные действия и разговор. Вы можете сделать это с помощью магических методов. Магические методы дают классы Python специальное поведение с использованием легко читаемого кода. Магические методы, позволяющие пользовательским объектам вести себя как встроенные типы питонов, позволяют определить, как объекты естественным образом взаимодействуют со встроенными операциями Python. Это улучшает как читаемость, так и удобство использования пользовательских классов. Например, вместо вызова метода add () инженер может просто использовать оператор +.

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

Строительство и представление объекта

Конструкция объекта относится к процессу инициализации объекта при создании экземпляра класса. Это обычно обрабатывается методом __init__. Представление объекта определяет, как объект должен отображаться при печати или преобразовании в строку. Это обычно обрабатывается __str__ для удобной строки и __repr__ для представления строки, в основном используемого для отладки.

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

  • __init__: инициализирует объект.
  • __str__: определяет Str (obj) для чтения вывода строки.
  • __REPR__: определяет PERP (OBJ), используемый при отладке.

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

Вот тот же объект, созданный без магических методов:

Да, оба выхода — это человек (‘alice’, 30), но если вы не используете магические методы, вам нужно явно установить атрибуты с помощью p.set_attributes () и вручную вызовать метод с помощью печати (p.get_representation ()). Хотя это может выглядеть просто в этом примере, рассмотрим проблемы, представленные с точки зрения читаемости и сложности кода в более крупных приложениях и репозиториях кода.

Перегрузка оператора

Перегрузка оператора позволяет определить, как операторы (+,-, = и т. Д.) Ведут себя с помощью пользовательских объектов. По умолчанию эти операторы работают со встроенными типами, такими как цифры и строки, но с перегрузкой оператора вы можете назначить им новые функции.

Например, Print (2 + 3) работает, потому что оператор + изначально добавляет два числа, а Print («A» + «B») работает, потому что Python может изначально объединять строки. Однако, если вы попробуете что -то вроде кода ниже, вы получите TypeError, потому что Python не знает, как добавить два объекта.

Этот код вынесет ошибку.

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

Арифметические операторы

  • __ADD__: ручки + (дополнение)
  • __sub__: ручки — (вычитание)
  • __mul__: ручки * (умножение)

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

Вот как будет выглядеть этот код без использования магических методов (и без ошибок):

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

Операторы сравнения

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

  • __eq__: handles == (равенство)
  • __LT__: ручки <(меньше)
  • __gt__: ручки> (больше, чем)

Вот пример с использованием магического метода __LT__:

Вывод: True

Вот ссылки на документы Python для перегрузки арифметики и оператора сравнения.

Создание пользовательских иеры

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

  • __iter__: делает объект итератным.
  • __next__: определяет поведение итерации.
  • __getItem __ (): позволяет индексировать (например, OBJ[index])

Вот пример использования этого кода:

Выход: 1, 2, 3, 4, 5

Заключение

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

Trending Stories youtube.com/thenewstack Tech движется быстро, не пропустите эпизод. Подпишитесь на наш канал YouTube, чтобы транслировать все наши подкасты, интервью, демонстрации и многое другое. Группа подпишитесь с эскизом. Джессика Вахтел — писатель по маркетингу разработчиков в InfluxData, где она создает контент, который помогает сделать данные о мире временных рядов более понятными и доступными. Джессика имеет опыт работы в разработке программного обеспечения и технической журналистике. Подробнее от Джессики Вахтел

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *