{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "5b4ad72c",
   "metadata": {},
   "source": [
    "# 14-11 · property\n",
    "\n",
    "Практика к разделу [«property: вычисляемые атрибуты»](../../site/chapters/glava-14/14-11-property.html)."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "440f0042",
   "metadata": {},
   "source": [
    "## Цель\n",
    "\n",
    "@property и @x.setter — проверка при присваивании без изменения синтаксиса."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b38df457",
   "metadata": {},
   "source": [
    "## Рабочий пример"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e004b862",
   "metadata": {},
   "outputs": [],
   "source": [
    "class Krug:\n",
    "    def __init__(self, radius):\n",
    "        self.radius = radius\n",
    "\n",
    "    @property\n",
    "    def radius(self):\n",
    "        return self._radius\n",
    "\n",
    "    @radius.setter\n",
    "    def radius(self, value):\n",
    "        if value <= 0:\n",
    "            raise ValueError(\"радиус должен быть положительным\")\n",
    "        self._radius = value\n",
    "\n",
    "    @property\n",
    "    def ploshchad(self):\n",
    "        return 3.14159 * self.radius ** 2\n",
    "\n",
    "krug = Krug(10)\n",
    "print(krug.ploshchad)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8cee500d",
   "metadata": {},
   "source": [
    "## Задание ★★ Самостоятельная задача\n",
    "\n",
    "Проверьте, что присваивание отрицательного радиуса вызывает `ValueError` — поймайте его через `try/except` и сохраните результат в переменную `validatsiya_srabotala`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7554a092",
   "metadata": {},
   "outputs": [],
   "source": [
    "krug = Krug(10)\n",
    "ploshchad_do = krug.ploshchad\n",
    "\n",
    "validatsiya_srabotala = False\n",
    "try:\n",
    "    krug.radius = -5\n",
    "except ValueError:\n",
    "    validatsiya_srabotala = True\n",
    "\n",
    "print(ploshchad_do, validatsiya_srabotala, krug.radius)"
   ]
  }
 ],
 "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
}
