Пока не применил класс, он казался «злой абстракцией». Сломался стереотип, когда вместо пары функций с параметрами собрал данные и действия вместе. Ощущение — как разложить вещи по коробкам с инструкциями, а не валить всё в кучу.
Нейтрально: класс группирует состояние (атрибуты) и поведение (методы) для одной сущности. Юнит-примера хватает.
class Order:
def __init__(self, items):
self.items = items # состояние
def total(self) -> float:
return sum(i["price"] * i["qty"] for i in self.items) # поведение
o = Order([{"price": 100, "qty": 2}, {"price": 50, "qty": 1}])
print(o.total()) # 250
Первый осмысленный класс дал радость: теперь «объект» в Django-моделях или в задаче на собесе читается как «данные + что с ними можно делать». Не магия, а аккуратная коробка.