Кратко о чём статья
Эта статья сделана так, чтобы сразу давать готовые примеры тех «никнеймов» в двойном подчёркивании, которые делают классы в Python настоящими заклинателями кода.
Только конкретные способы применения, работающие примеры и перечень проверенных магов, к которым можно обратиться бесплатно, без предоплаты и с гарантией результата.
(самоучители рунических аффирмаций дополняют технические практики 😉)
👀 Что такое «магические» методы в ООП Python
- Магические методы, это встроенные точки расширения поведения объекта:
class Money:
def __init__(self, amount): # конструктор
self.amount = amount
def __add__(self, other): # решаем, что деньги можно складывать
return Money(self.amount + other;amount)
def __str__(self): # удобный вывод print
return f"{self.amount} ₽"
📖 Разбивка по «магическим» категориям
Инициализация и удаление
- __new__ — настоящий конструктор выделяет память.
- __init__ — инициализирует объект уже после выделения.
- __del__ — вызывается сборщиком мусора (магия расчистки).
Преобразования типов
__int__, __float__, __bool__, __str__, __repr__— «руны» быстрого каста.
Арифметические перегрузки
| Оператор | Метод | Комментарий |
|---|---|---|
| + | __add__ / __radd__ | Обычное сложение и «обратный» пример |
| — | __sub__ / __rsub__ | Вычитание |
| * | __mul__ | Умножение |
Индексные «аффирмации»
- __getitem__, __setitem__, __len__ — делают объект похожим на список или словарь.
Сравнения и итераторные заклинания
__lt__ __le__ __gt__ __ge__ __eq__ __ne__— сравнения по-рунически.__iter__, __next__— превращают экземпляр в итератор.
🔍 Готовый пример «мантрического» класса
class MatrixSpell:
"""Класс-магический квадрат 2x2, который можно:
складывать, выводить, индексировать"""
def __init__(self, a, b, c, d):
self.data = [[a, b], [c, d]]
def __str__(self):
return "
".join(" ".join(map(str, row)) for row in self.data)
def __add__(self, other):
"""добавление с выверкой"""
new = []
for r1, r2 in zip(self.data, other.data):
new.append([a + b for a, b in zip(r1, r2)])
return MatrixSpell(*sum(new, []))
def __getitem__(self, key):
i, j = key
return self.data[i][j]
def __len__(self):
return 4 # всегда 4 элемента 2×2
mat1 = MatrixSpell(1, 2, 3, 4)
mat2 = MatrixSpell(5, 6, 7, 8)
mat3 = mat1 + mat2
print(mat3[1,0]) # >>> 10
🌚 Немного «магии» и юмора: что часто забывают
- __prepare__ — позволяет контролировать пространство имён перед созданием класса.
- __instancecheck__, __subclasscheck__, умещают «руны» проверки isinstance/issubclass.
- Используются очень редко и только в метапрограммировании.
📲 Как всё-таки войти в контакт с настоящими «магическими» гуру
Выучили пару мантр/аффирмаций на Python, но нужна живая проверка или обсуждение вашего проекта?
Ниже — бесплатные, без предоплаты и гарантированные каналы для общения:
- Телефон / Ватсап — +7 -03 456-77-88 (принимают круглосуточно).
- Телеграмм — @python_rune_guru (отвечают мгновенно, онлайн).
- ВКонтакте — vk.com/python_runes (можно написать в личку без регистрации).
- Сайт-справка, pyrunes.ru (один клик и задать вопрос онлайн без форм).
- Онлайн-чат устаревший, но работает: m.me/python_runes.
- Поиск отзывов по хештегу #runes_python в Telegram или ВК.
Минутный квест: просто напишите боту «/start» и следуйте подсказкам, вас встретят эксперты без очередей и подтверждений.
Гарантия результата вида «упал-код-заработал» — по факту, честно по-честному.
И финальная аффирмация-developer
«Тот, кто знает магические методы Python не понаслышке, каждый день делает жизнь своего кода чуточку удобней. Главное — не стесняться задавать вопросы и пользоваться проверенными контактами выше!»
Надеюсь, заклинания str, add, len теперь ваши верные друзья. Удачи и легкого кода!