Глава 14 · Создаём объекты реального мира

Практика: dataclass

Tovar главы 14.14, но короче — @dataclass берёт на себя шаблонный код.

Практика: Tovar как dataclass

Перепишем Tovar из раздела 14.14 через @dataclass:

tovar_dataclass.py
from dataclasses import dataclass

@dataclass
class Tovar:
    nazvanie: str
    tsena: float

    def so_skidkoj(self, protsent):
        return self.tsena * (1 - protsent / 100)

knigi = Tovar("Книга", 590)
print(knigi)                    # Tovar(nazvanie='Книга', tsena=590)
print(knigi.so_skidkoj(10))      # 531.0
__eq__ достаётся бесплатно
Tovar("Книга", 590) == Tovar("Книга", 590)True, хотя мы не писали __eq__ вручную ни разу: dataclass сравнивает по значениям всех полей автоматически.
★★ Самостоятельная задача
Zakaz как dataclass

Определите @dataclass Zakaz с полями tovar: Tovar и kolichestvo: int, и методом summa(self), возвращающим self.tovar.tsena * self.kolichestvo.

Практика: dataclass Tovar
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →