Надоело видеть в консоли нечитабельную ерунду вроде <__main__.Cat object at 0x000002359011C160>? 🤔
Давайте сделаем вывод объектов Python понятным и информативным для человека!
В этом нам помогут магические методы
__str__ и __repr__. Они "отрабатывают" в момент отображения объекта и превращают технический мусор в красивую строку. В чем разница между ними?1️⃣
__str__ — для пользователей (когда вы делаете print() или str()).2️⃣
__repr__ — для разрабов (в режиме отладки или консоли).Пара важных нюансов: если не определен первый, то вызывается второй, иначе просто будет не совсем понятная лабуда в выводе.
Пример с котиками😼
class Cat:
def __init__(self, name):
self.name = name
def __repr__(self):
return f'{self.__class__}: {self.name}'
def __str__(self):
return f'Имя кошки: {self.name}'
cat = Cat('Василий')
cat # в консоле выведет: <class '__main__.Cat'>: Василий
print(cat) # Имя кошки: Василий
str(cat) # Имя кошки: Василий
И еще два довольно простых метода
__len__, __abs__. По умолчанию они не определены, и их при их вызове получим ошибку. Но мы можем их легко переделать по себя, например вот так:
class Point:
def __init__(self, *args):
self.__coords = args
def __len__(self):
return len(self.__coords)
def __abs__(self):
return list(map(abs, self.__coords))
p = Point(1, -2)
print(len(p)) # 2
print(abs(p)) # [1, 2]
Надеюсь, этот мини-урок поможет вашему коду стать чуточку понятнее и красивее! ✨ Если было полезно, буду рад вашим реакциям — это лучшая мотивация для новых полезных постов.
Как вам такие "магические" методы? 👇
🔥 — Огонь, приму на вооружение!
🤔 — Знал, но освежил память.
🐱 — Котики — топ!