Python магический метод print

Магические методы __str__, __repr__, __len__, __abs__

На этом занятии я расскажу о, так называемых, магических методах, которые определены в каждом классе и записываются через два подчеркивания вначале и в конце имен, например, так:

Как я говорил, их еще называют

dunder-методами (от англ. сокращения double underscope)

  • __str__() – магический метод для отображения информации об объекте класса для пользователей (например, для функций print, str);
  • __repr__() – магический метод для отображения информации об объекте класса в режиме отладки (для разработчиков).
class Cat: def __init__(self, name): self.name = name

При выводе cat, увидим служебную информацию: Если нам нужно ее как-то переопределить и отобразить в другом виде (формате), то, как раз для этого используются магические методы __str__ и __repr__. Давайте для начала переопределим метод __repr__ и посмотрим, как это отразится на выводе служебной информации о классе:

def __repr__(self): return f": "

Обратите внимание, этот метод должен возвращать строку, поэтому здесь записан оператор return и формируемая строка. Что именно возвращать, мы решаем сами, в данном случае – это название класса и имя кошки. Переопределим измененный класс Cat. И, смотрите, теперь при создании экземпляра мы видим другую информацию при его выводе: : Васька Как раз то, что определили в магическом методе __repr__. То же самое увидим и при использовании функции print и str. По идее, здесь должен отрабатывать другой магический метод __str__, но так как он у нас еще не переопределен, то автоматически выполняется метод __repr__. Давайте добавим второй магический метод __str__ и посмотрим, как это повлияет на отображение данных:

Читайте также:  Php set file name

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

Магические методы __len__ и __abs__

  • __len__() – позволяет применять функцию len() к экземплярам класса;
  • __abs__() — позволяет применять функцию abs() к экземплярам класса.
class Point: def __init__(self, *args): self.__coords = args

А, далее, по программе нам бы хотелось определять размерность координат с помощью функции len(), следующим образом:

Если сейчас запустить программу, то увидим ошибку, так как функция len не применима к экземплярам классов по умолчанию. Как вы уже догадались, чтобы изменить это поведение, можно переопределить магический метод __len__() и в нашем случае это можно сделать так:

def __len__(self): return len(self.__coords)

Смотрите, мы здесь возвращаем размер списка __coords и если после этого запустить программу, то как раз это значение и будет выведено в консоль. То есть, магический метод __len__ указал, что нужно возвращать, в момент применения функции len() к экземпляру класса. Как видите, все просто и очевидно. Следующий магический метод __abs__ работает аналогичным образом, только активируется в момент вызова функции abs для экземпляра класса, например, так:

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

def __abs__(self): return list( map(abs, self.__coords) )

Источник

Python магические методы

В этой части учебника мы рассмотрим что такое в Python магические методы класса, это достаточна важная тема, но лёгкая.

Что такое магические методы:

Для начала разберём что такое эти магические методы, если кратко говоря, то это базовые методы, которые можно назначить любому классу.

Читайте также:  Python update object in list

Например в Python относится таким методам, метод __init__() или __del__() , которые мы разбирали в части про конструкторы.

Python магические методы класса:

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

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

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

Как видите мы тут в методе __str__() возвращаем строку с маркой нашей машины и скоростью, и более того всё это обозначили.

После мы создаём объект класса Car и выводим его, вот что у нас получиться:

__str__ магический методы Python

Как видите он нам вывел то, что мы хотели, таким образом можно использовать __str__() .

Также подобные этому методы есть __int__() , __float__() их используют при выведи объекта виде целых чисел и сплававшей точкой соответственно.

Например когда для объекта использую функцию int() , при выведи, и т.д..

Ещё есть подобные методы, но только для арифметических действий, например __add__(), он нужен для сложения.

Вот не большой пример его использования:

Как видите мы принимаем ещё один аргумент, я его назвал a, он равен тому числу, с которым мы будем складывать, как видите мы тут складываем скорость.

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

Ещё пример работы магического метода

Мы использовали для вывода эту команду print(bmv+100) и как видите получилось 300, это всё потому что мы прибавляем к скорости и возвращаем только скорость, а не всё, поэтому у нас вывелось текущие значение этого параметра.

Также есть и другие арифметические методы:

  • __sub__() — Вычитание;
  • __mul__() — Умножение;
  • __truediv__() — Деление (x/y);
  • __floordiv__() — Целочисленное деление (x // y);
  • __mod__() — Остаток от деления;
  • __pow__() — Возведение в степень;
Читайте также:  Forum wowcircle showthread php

Опять же это только основные методы которые есть, там ещё есть специальные для битовых операций или логических.

Вывод:

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

Источник

Оцените статью