Вопрос №28
Осталось:
Что такое магические методы?
Образцовый ответ
Показывать ответ по умолчанию
Магические методы (от англ. double underscore — двойное подчёркивание) — это специальные методы, которые определяют поведение объектов при стандартных операциях.
Строковое представление:
class Product: def __init__(self, name, price): self.name = name self.price = price def __str__(self): # Для пользователя (print, str()) return f"{self.name}: {self.price} руб." def __repr__(self): # Для разработчика (отладка, repr()) return f"Product('{self.name}', {self.price})" p = Product("Книга", 500) print(p) # Книга: 500 руб. print(repr(p)) # Product('Книга', 500)
Сравнение объектов:
class Point: def __init__(self, x, y): self.x = x self.y = y def __eq__(self, other): return self.x == other.x and self.y == other.y def __lt__(self, other): return (self.x ** 2 + self.y ** 2) < (other.x ** 2 + other.y ** 2) Point(1, 2) == Point(1, 2) # True Point(1, 2) < Point(3, 4) # True
Другие полезные магические методы:
- __len__ — поведение len(obj)
- __getitem__ — доступ по индексу obj[key]
- __contains__ — оператор in
- __add__ — оператор +
- __call__ — вызов объекта как функции obj()
class Basket: def __init__(self): self.items = [] def __len__(self): return len(self.items) def __contains__(self, item): return item in self.items basket = Basket() basket.items.append("яблоко") print(len(basket)) # 1 print("яблоко" in basket) # True
