{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [], "authorship_tag": "ABX9TyNRqEbnNzzCEIWmkPgWrh1+", "include_colab_link": true }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "view-in-github", "colab_type": "text" }, "source": [ "\"Open" ] }, { "cell_type": "markdown", "metadata": { "id": "125MbW_GgQtS" }, "source": [ "# Métodos estáticos `@staticmethod`\n", "* Se antepone la palabra reservada **`@staticmethod`**\n", "* Pueden ser llamados sin tener una instancia de la clase\n", "* No tienen acceso al exterior, no tienen acceso a ningún otro atributo ni método" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "id": "CGFbDQLrgQtT", "outputId": "e0b292a8-ce78-4f04-9d4b-3ac1325201f4", "colab": { "base_uri": "https://localhost:8080/" } }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "['harina', 'huevos', 'leche', 'azucar']\n", "20\n", "314.1592653589793\n" ] } ], "source": [ "import math\n", "class Pastel:\n", " def __init__(self, ingredientes, tamaño):\n", " self.ingredientes = ingredientes\n", " self.tamaño = tamaño\n", " def __repr__(self):\n", " return (f'Ingredientes ({self.ingredientes}, 'f'Tamaño {self.tamaño})')\n", " def area(self):\n", " return self.tamaño_area(self.tamaño)\n", " @staticmethod\n", " def tamaño_area(A):\n", " return math.pi*A**2\n", "\n", "mi_pastel = Pastel(['harina', 'huevos', 'leche', 'azucar'], 20)\n", "print(mi_pastel.ingredientes)\n", "print(mi_pastel.tamaño)\n", "print(mi_pastel.tamaño_area(10))" ] }, { "cell_type": "markdown", "source": [ "### Ejemplo para ilustrar ```@staticmethod```" ], "metadata": { "id": "-LXGo5lT0wWR" } }, { "cell_type": "markdown", "source": [ "Para ilustrar el uso de ```@staticmethod``` en Python, podemos definir una clase Coffee y un método is_hot que nos diga si el café está caliente o no. En este caso, como no necesitamos acceder a ningún atributo de la clase o instancia, podemos usar un método estático. \n", "\n", "En este ejemplo, is_hot es un método estático que toma un argumento temperature. Si la temperatura es mayor que 70 grados Celsius, devuelve True, lo que significa que el café está caliente. De lo contrario, devuelve False, lo que significa que el café no está caliente." ], "metadata": { "id": "KDN9kqmYvXvg" } }, { "cell_type": "code", "source": [ "class Coffee:\n", " @staticmethod\n", " def is_hot(temperature):\n", " if temperature > 70:\n", " return True\n", " else:\n", " return False\n", "\n", "print(Coffee.is_hot(80)) # True\n", "print(Coffee.is_hot(60)) # False" ], "metadata": { "id": "tpBOUoO6voBR", "outputId": "5f8d78c4-cf6d-4f45-b421-0a6c4c740dfe", "colab": { "base_uri": "https://localhost:8080/" } }, "execution_count": 2, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "True\n", "False\n" ] } ] }, { "cell_type": "markdown", "source": [ "## Diferencia entre ```@classmethod``` y ```@staticmethod```\n", "En este ejemplo:\n", "1. *nombre_completo* es un método de instancia que devuelve el nombre completo de la persona.\n", "2. *de_nombre_completo* es un método de clase que recibe el nombre completo de la persona como argumento y devuelve una nueva instancia de la clase Persona. \n", "3. *es_mayor_de_edad* es un método estático que recibe la edad como argumento y devuelve *True* si la edad es mayor o igual a 18." ], "metadata": { "id": "jyVDnF3vz0RQ" } }, { "cell_type": "code", "source": [ "class Persona:\n", " def __init__(self, nombre, apellido):\n", " self.nombre = nombre\n", " self.apellido = apellido\n", "\n", " def nombre_completo(self):\n", " return f\"{self.nombre} {self.apellido}\"\n", "\n", " @classmethod\n", " def de_nombre_completo(cls, nombre_completo):\n", " nombre, apellido = nombre_completo.split()\n", " return cls(nombre, apellido)\n", "\n", " @staticmethod\n", " def es_mayor_de_edad(edad):\n", " return edad >= 18\n", "\n", "p1 = Persona(\"Juan\", \"Pérez\")\n", "p2 = Persona.de_nombre_completo(\"María García\")\n", "\n", "print(p1.nombre_completo()) # Juan Pérez\n", "print(p2.nombre_completo()) # María García\n", "\n", "print(Persona.es_mayor_de_edad(20)) # True\n", "print(Persona.es_mayor_de_edad(15)) # False" ], "metadata": { "id": "ehCx3kZ2z7-5", "outputId": "46ff2670-40a9-4f29-a742-5560e3d4165c", "colab": { "base_uri": "https://localhost:8080/" } }, "execution_count": 3, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Juan Pérez\n", "María García\n", "True\n", "False\n" ] } ] } ] }