{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "80baa54a",
   "metadata": {},
   "source": [
    "# 14-18 · Полиморфизм\n",
    "\n",
    "Практика к разделу [«Полиморфизм»](../../site/chapters/glava-14/14-18-polimorfizm.html)."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "962357ee",
   "metadata": {},
   "source": [
    "## Цель\n",
    "\n",
    "Один вызов метода — разное поведение в зависимости от класса объекта."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0e70a348",
   "metadata": {},
   "source": [
    "## Рабочий пример"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8c3cf1d4",
   "metadata": {},
   "outputs": [],
   "source": [
    "class Sobaka:\n",
    "    def zvuk(self):\n",
    "        return \"Гав!\"\n",
    "\n",
    "\n",
    "class Koshka:\n",
    "    def zvuk(self):\n",
    "        return \"Мяу!\"\n",
    "\n",
    "\n",
    "class Korova:\n",
    "    def zvuk(self):\n",
    "        return \"Му!\"\n",
    "\n",
    "\n",
    "def poluchit_zvuk(zhivotnoe):\n",
    "    return zhivotnoe.zvuk()\n",
    "\n",
    "zhivotnye = [Sobaka(), Koshka(), Korova()]\n",
    "zvuki = [poluchit_zvuk(zh) for zh in zhivotnye]\n",
    "print(zvuki)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "86bcb527",
   "metadata": {},
   "source": [
    "## Задание ★ Базовая практика\n",
    "\n",
    "Проверьте `poluchit_zvuk()` на каждом классе по отдельности."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ae813ff1",
   "metadata": {},
   "outputs": [],
   "source": [
    "zvuk_sobaki = poluchit_zvuk(Sobaka())\n",
    "zvuk_koshki = poluchit_zvuk(Koshka())\n",
    "zvuk_korovy = poluchit_zvuk(Korova())\n",
    "print(zvuk_sobaki, zvuk_koshki, zvuk_korovy)"
   ]
  }
 ],
 "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
}
