{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "4a9a57ff",
   "metadata": {},
   "source": [
    "# 14-12 · Мини-проект: Rectangle\n",
    "\n",
    "Практика к разделу [«Мини-проект: Rectangle»](../../site/chapters/glava-14/14-12-mini-proekt-rectangle.html)."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e3f1b413",
   "metadata": {},
   "source": [
    "## Цель\n",
    "\n",
    "Проверенные размеры и вычисляемые площадь с периметром через property."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7591a185",
   "metadata": {},
   "source": [
    "## Рабочий пример"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "23daf5f6",
   "metadata": {},
   "outputs": [],
   "source": [
    "class Rectangle:\n",
    "    def __init__(self, width, height):\n",
    "        self.width = width\n",
    "        self.height = height\n",
    "\n",
    "    @property\n",
    "    def width(self):\n",
    "        return self._width\n",
    "\n",
    "    @width.setter\n",
    "    def width(self, value):\n",
    "        if value <= 0:\n",
    "            raise ValueError(\"ширина должна быть положительной\")\n",
    "        self._width = value\n",
    "\n",
    "    @property\n",
    "    def height(self):\n",
    "        return self._height\n",
    "\n",
    "    @height.setter\n",
    "    def height(self, value):\n",
    "        if value <= 0:\n",
    "            raise ValueError(\"высота должна быть положительной\")\n",
    "        self._height = value\n",
    "\n",
    "    @property\n",
    "    def area(self):\n",
    "        return self.width * self.height\n",
    "\n",
    "    @property\n",
    "    def perimeter(self):\n",
    "        return 2 * (self.width + self.height)\n",
    "\n",
    "r = Rectangle(10, 4)\n",
    "print(r.area, r.perimeter)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e03ee5dc",
   "metadata": {},
   "source": [
    "## Задание ★★ Самостоятельная задача\n",
    "\n",
    "Добавьте классу `Rectangle` свойство `is_square`, возвращающее `True`, если `width` равна `height`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "32d9db77",
   "metadata": {},
   "outputs": [],
   "source": [
    "class Rectangle:\n",
    "    def __init__(self, width, height):\n",
    "        self.width = width\n",
    "        self.height = height\n",
    "\n",
    "    @property\n",
    "    def width(self):\n",
    "        return self._width\n",
    "\n",
    "    @width.setter\n",
    "    def width(self, value):\n",
    "        if value <= 0:\n",
    "            raise ValueError(\"ширина должна быть положительной\")\n",
    "        self._width = value\n",
    "\n",
    "    @property\n",
    "    def height(self):\n",
    "        return self._height\n",
    "\n",
    "    @height.setter\n",
    "    def height(self, value):\n",
    "        if value <= 0:\n",
    "            raise ValueError(\"высота должна быть положительной\")\n",
    "        self._height = value\n",
    "\n",
    "    @property\n",
    "    def area(self):\n",
    "        return self.width * self.height\n",
    "\n",
    "    @property\n",
    "    def perimeter(self):\n",
    "        return 2 * (self.width + self.height)\n",
    "\n",
    "    @property\n",
    "    def is_square(self):\n",
    "        return self.width == self.height\n",
    "\n",
    "kvadrat = Rectangle(5, 5)\n",
    "ne_kvadrat = Rectangle(5, 9)\n",
    "print(kvadrat.is_square, ne_kvadrat.is_square)"
   ]
  }
 ],
 "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
}
