{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "37da5c7e",
   "metadata": {},
   "source": [
    "# 14-21 · Специальные методы\n",
    "\n",
    "Практика к разделу [«Специальные методы»](../../site/chapters/glava-14/14-21-spetsialnye-metody.html)."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5c94f37f",
   "metadata": {},
   "source": [
    "## Цель\n",
    "\n",
    "__str__, __eq__ и __hash__ — как объект подключается к print(), == и set()."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "de397ad4",
   "metadata": {},
   "source": [
    "## Рабочий пример"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8847f891",
   "metadata": {},
   "outputs": [],
   "source": [
    "class Dengi:\n",
    "    def __init__(self, summa):\n",
    "        self.summa = summa\n",
    "\n",
    "    def __str__(self):\n",
    "        return f\"{self.summa} ₽\"\n",
    "\n",
    "    def __eq__(self, other):\n",
    "        return self.summa == other.summa\n",
    "\n",
    "    def __hash__(self):\n",
    "        return hash(self.summa)\n",
    "\n",
    "a = Dengi(100)\n",
    "b = Dengi(100)\n",
    "print(str(a), a == b)\n",
    "print(len({a, b}))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1f37908f",
   "metadata": {},
   "source": [
    "## Задание ★★ Самостоятельная задача\n",
    "\n",
    "Проверьте `Dengi` на нескольких значениях: убедитесь, что разные суммы не равны и корректно работают в множестве."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2beac0ac",
   "metadata": {},
   "outputs": [],
   "source": [
    "c = Dengi(250)\n",
    "ravny = (a == b)\n",
    "ne_ravny = (a == c)\n",
    "mnozhestvo = {a, b, c}\n",
    "print(ravny, ne_ravny, len(mnozhestvo))"
   ]
  }
 ],
 "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
}
