Пока не применил класс, он казался «злой абстракцией». Сломался стереотип, когда вместо пары функций с параметрами собрал данные и действия вместе. Ощущение — как разложить вещи по коробкам с инструкциями, а не валить всё в кучу.

Нейтрально: класс группирует состояние (атрибуты) и поведение (методы) для одной сущности. Юнит-примера хватает.

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-моделях или в задаче на собесе читается как «данные + что с ними можно делать». Не магия, а аккуратная коробка.