Магические методы ооп питон

Узнай, как 40 способов __init__ и другие магические методы ооп питон превращают клавиатуру в волшебную палочку. Нет скучного синтаксиса!

Кратко о чём статья

Эта статья сделана так, чтобы сразу давать готовые примеры тех «никнеймов» в двойном подчёркивании, которые делают классы в 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} ₽"
     

📖 Разбивка по «магическим» категориям

Инициализация и удаление

  1. __new__ — настоящий конструктор выделяет память.
  2. __init__ — инициализирует объект уже после выделения.
  3. __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 теперь ваши верные друзья. Удачи и легкого кода!