{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "2f76afc1",
   "metadata": {},
   "source": [
    "# 14-24 · Практика: dataclass\n",
    "\n",
    "Практика к разделу [«Практика: dataclass»](../../site/chapters/glava-14/14-24-praktika-dataclass.html)."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "67c6424d",
   "metadata": {},
   "source": [
    "## Цель\n",
    "\n",
    "Переписать Tovar главы 14.14 через @dataclass и собрать вокруг него Zakaz."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ec8192e3",
   "metadata": {},
   "source": [
    "## Рабочий пример"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "550774b8",
   "metadata": {},
   "outputs": [],
   "source": [
    "from dataclasses import dataclass\n",
    "\n",
    "@dataclass\n",
    "class Tovar:\n",
    "    nazvanie: str\n",
    "    tsena: float\n",
    "\n",
    "    def so_skidkoj(self, protsent):\n",
    "        return self.tsena * (1 - protsent / 100)\n",
    "\n",
    "knigi = Tovar(\"Книга\", 590)\n",
    "print(knigi)\n",
    "print(knigi.so_skidkoj(10))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "538890dd",
   "metadata": {},
   "source": [
    "## Задание ★★ Самостоятельная задача\n",
    "\n",
    "Определите `@dataclass Zakaz` с полями `tovar: Tovar` и `kolichestvo: int`, и методом `summa()`, возвращающим `self.tovar.tsena * self.kolichestvo`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6cc7d053",
   "metadata": {},
   "outputs": [],
   "source": [
    "@dataclass\n",
    "class Zakaz:\n",
    "    tovar: Tovar\n",
    "    kolichestvo: int\n",
    "\n",
    "    def summa(self):\n",
    "        return self.tovar.tsena * self.kolichestvo\n",
    "\n",
    "ruchka = Tovar(\"Ручка\", 100)\n",
    "zakaz = Zakaz(ruchka, 3)\n",
    "print(zakaz.summa())"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Cartesian Python 3.14",
   "language": "python",
   "name": "cartesian-python314"
  },
  "language_info": {
   "name": "python",
   "version": "3.14.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
