Skip to content

Instantly share code, notes, and snippets.

@Santiago-j-s
Last active October 7, 2019 01:25
Show Gist options
  • Save Santiago-j-s/233bca95bd1a58bd00033ebf36dc2cad to your computer and use it in GitHub Desktop.
Save Santiago-j-s/233bca95bd1a58bd00033ebf36dc2cad to your computer and use it in GitHub Desktop.
Objetos en python
Display the source blob
Display the rendered blob
Raw
{
"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