Last active
October 7, 2019 01:25
-
-
Save Santiago-j-s/233bca95bd1a58bd00033ebf36dc2cad to your computer and use it in GitHub Desktop.
Objetos en python
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Objetos en python\n", | |
"\n", | |
"Ayer te dije que en python todo es un objeto ¿qué significa que todo sea un objeto?" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Bueno, por ejemplo, los objetos tienen id y tipo" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"id de 2: 9454656\n", | |
"<class 'int'>\n", | |
"\n", | |
"id de \"hi\": 140507759267944\n", | |
"<class 'str'>\n", | |
"\n", | |
"id de 2.1: 140507575629048\n", | |
"<class 'float'>\n", | |
"\n" | |
] | |
} | |
], | |
"source": [ | |
"print(f\"id de 2: {id(2)}\")\n", | |
"print(type(2))\n", | |
"print()\n", | |
"\n", | |
"print(f'id de \"hi\": {id(\"hi\")}')\n", | |
"print(type(\"hi\"))\n", | |
"print()\n", | |
"\n", | |
"print(f\"id de 2.1: {id(2.1)}\")\n", | |
"print(type(2.1))\n", | |
"print()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## A los objetos también los puedo asignar a variables" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"9454656\n", | |
"<class 'int'>\n" | |
] | |
} | |
], | |
"source": [ | |
"a = 2\n", | |
"\n", | |
"print(id(a))\n", | |
"print(type(a))" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Mira lo que ocurre con el primer id de antes ¿recuerdas que te dije que los primeros números enteros estaban precargados (-5 a 256, no comments about that)? Le asigne a la variable `a` el literal 2 y python no creo un objeto nuevo sino que uso el nro precargado." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"a es 2: True\n", | |
"\n", | |
"9454656\n", | |
"\n", | |
"a es b: True\n", | |
"\n", | |
"c es 257: False\n", | |
"id de c: 140507575339120\n", | |
"id de 257: 140507575338928\n", | |
"\n", | |
"False\n" | |
] | |
} | |
], | |
"source": [ | |
"print(f\"a es 2: {a is 2}\")\n", | |
"print()\n", | |
"\n", | |
"b = a\n", | |
"print(id(b))\n", | |
"print()\n", | |
"\n", | |
"print(f\"a es b: {a is b}\")\n", | |
"print()\n", | |
"\n", | |
"c = 257\n", | |
"print(f\"c es 257: {c is 257}\")\n", | |
"# ¡Cuidado con el operador `is` que no realiza una comparación\n", | |
"# sino que nos dice si dos objetos son el mismo objeto!\n", | |
"\n", | |
"print(f\"id de c: {id(c)}\")\n", | |
"print(f\"id de 257: {id(257)}\")\n", | |
"print()\n", | |
"\n", | |
"print(id(c) == id(257))\n", | |
"## ¡Los ids no son iguales, no son el mismo objeto!" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## ¿Qué ocurre con las clases?" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"class Persona:\n", | |
" def __init__(self, nombre: str):\n", | |
" self.nombre = nombre\n", | |
" \n", | |
" def saludar(self):\n", | |
" return f\"Hi {self.nombre}\"" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Bueno, cuando creo una nueva _instancia_ de una clase se crea un objeto cuyo tipo es la clase" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"<__main__.Persona object at 0x7fca781b1128>\n", | |
"<__main__.Persona object at 0x7fca781b10f0>\n", | |
"\n", | |
"<class '__main__.Persona'>\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"'0x7fca781b1128'" | |
] | |
}, | |
"execution_count": 5, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"a = Persona(\"Persona\")\n", | |
"b = Persona(\"Otra persona\")\n", | |
"\n", | |
"print(a)\n", | |
"print(b)\n", | |
"print()\n", | |
"\n", | |
"print(type(a)) # El tipo es la clase, ignoremos de momento el __main__.\n", | |
"hex(id(a)) # El id no es más que la dirección de memoria donde se encuentra el objeto,\n", | |
" # funciona muy bien como identificador único" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Ahora viene lo divertido\n", | |
"\n", | |
"a y b son instancias de la clase persona, y por tanto son objetos.\n", | |
"\n", | |
"Pero antes dije que *todo* en python es un objeto, ¿es posible que la clase Persona sea en si misma un objeto?" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"<class 'type'>\n", | |
"0x28653b8\n", | |
"\n", | |
"<class 'type'>\n", | |
"0x28653b8\n", | |
"\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"'Hi nombre'" | |
] | |
}, | |
"execution_count": 6, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"print(type(Persona))\n", | |
"print(hex(id(Persona)))\n", | |
"print()\n", | |
"\n", | |
"# Parece que sí, que es una instancia de la clase `type`\n", | |
"# ¿Puedo asignar `Persona` a una variable?\n", | |
"\n", | |
"p = Persona\n", | |
"\n", | |
"print(type(p))\n", | |
"print(hex(id(p)))\n", | |
"print()\n", | |
"\n", | |
"# ¿Podré crear una nueva instancia de `Persona` usando la variable `p` en lugar de `Persona`?\n", | |
"nueva_persona = p(\"nombre\")\n", | |
"nueva_persona.saludar()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Entonces _of course_ las funciones también son objetos, y esta es la parte linda de POO, los objetos no solo representan sustantivos\n", | |
"\n", | |
"(no funciona así en todos los lenguajes \"orientados a objetos\", pero así funcionaba Smalltalk y a Alan Kay le encantaba lisp que es un lenguaje super flexible con el uso de las funciones)\n", | |
"\n", | |
"Juguemos un poco con esta idea de las funciones como objetos y la flexibilidad que ello nos brinda" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import numpy as np\n", | |
"import matplotlib.pyplot as plt\n", | |
"\n", | |
"from typing import Callable\n", | |
"\n", | |
"def f3(\n", | |
" f: Callable[[np.ndarray], np.ndarray],\n", | |
" g: Callable[[np.ndarray], np.ndarray],\n", | |
" x: np.ndarray\n", | |
"):\n", | |
" return np.piecewise(x, [x < 0, x >= 0], [f, g])" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"`f3` recibe dos funciones, `f` y `g`, y un numpy array.\n", | |
"\n", | |
"Retorna el array resultante de aplicar `f` a los valores a los valores menores que 0 y `g` a los valores mayores o iguales a cero. Una idea tan simple como \"las funciones son objetos\" nos permite hacer en forma muy sencilla cosas que de otra forma llevarían bastante trabajo." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[<matplotlib.lines.Line2D at 0x7fca50f43898>]" | |
] | |
}, | |
"execution_count": 8, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"def f1(x: np.ndarray):\n", | |
" return x ** 2\n", | |
"\n", | |
"def f2(x: np.ndarray):\n", | |
" return x * 2\n", | |
"\n", | |
"x = np.linspace(-50, 50, 1000)\n", | |
"y = f3(f1, f2, x)\n", | |
"\n", | |
"plt.plot(x, y)" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.7.0" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment