jueves, 20 de diciembre de 2018

Receta Python 3 No. 8-9: Crear un Nuevo Tipo de Dato o Atributo de Instancia

1. Problema

Agregar nueva funcionalidad a una tipo de dato a través de la adición de un atributo de instancia.

2. Solución

Para la agregación de funcionalidad a una clase es necesario definirla como un descriptor; para ello se requiere agregar las siguientes operaciones básicas: __get__(), __set__(), y __delete__() (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python descriptor.py [enlace alternativo]:

Prueba de ejecución:

2 5
...
TypeError: Se requiere un argumento de tipo entero.

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

lunes, 17 de diciembre de 2018

Receta Python 3 No. 8-8: Extener una Propiedad en una Subclase

1. Problema

Se requiere exteneder la funcionalidad de una propiedad definida en una clase padre sobre la implementación de una sublase.

2. Solución

El uso de la invocación de los métodos de acceso por medio del método super() es la solución al requerimiento (Beazly, Jones, 2013).

3. Código Python 3

Prueba de ejecución:

Asignando nuevo nombre
Recuperando nombre
Einstein

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

domingo, 16 de diciembre de 2018

Receta Python 3 No. 8-7: Invocar a un Método de una Clase Padre

1. Problema

Se requiere invocar un método que pertenezca a la definición e implementación de una clase padre (superclase) en lugar del método sobreescrito en una clase hija (subclase).

2. Solución

A través del método super() es posible invocar el método perteneciente a una clase padre (Beazly, Jones, 2013).

Un uso común de este método es la inicialización del constructor de una superclase.

3. Código Python 3

Archivo Python invocar_metodo_superclase.py [enlace alternativo]:

Prueba de ejecución:


ClaseB.mensaje

ClaseA.mensaje

En la línea 10 se invoca el método constructor (o inicializador) de la clase ClaseA por medio de la instrucicón super().__init__().

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

jueves, 13 de diciembre de 2018

Receta Python 3 No. 8-6: Crear Atributos Gestionados

1. Problema

Crear atributos gestionados para validar o comprobar la asignación u obtención de valores de una instancia.

2. Solución

Por medio de la definición de una propiedad es posible definir y personalizar el acceso a un atributo. Esto se realiza por medio de atributos: @property, @nombre_atributo.accesor (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python atributos_gestionados.py [enlace alternativo]:

Prueba de ejecución:

Edward
TypeError: El tipo de dato debe ser string

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

viernes, 7 de diciembre de 2018

Receta Python 3 No. 8-5: Encapsular Elementos de Datos en una Clase

1. Problema

Encapsular campos de instancia como elementos privados independiente de la carencia de modificadores de acceso en Python.

2. Solución

A través de la convención de nombres para campos de instancia que consiste en poner un carácter de guión bajo (o underscore) sobre los miembros atributos y métodos se supone como elementos internos (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python encapsular_miembros.py [enlace alternativo]:


Aquí hay que tener en cuenta que la convención de nombres no hace que un miembro (método o atributo) sea privada: es sólo una convención de nombre.

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

jueves, 6 de diciembre de 2018

Receta Python 3 No. 8-4: Uso Eficiente de Memoria al Crear una Cantidad Grande de Instancias

1. Problema

Se cuenta con un script Python que hace uso de una gran cantidad de instancias. Se requiere optimizar la memoria para un mejor desempeño.

2. Solución

Por medio del miembro __slots__ se puede optimizar la representación interna de instancias: cada instancia se crea como un arreglo de tamaño fijo, similar a una tupla. Cada atributo dentro de __slots__ se mapea un índice específico dentro del arreglo (Beazly, Jones, 2013).

3. Código Python

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

miércoles, 5 de diciembre de 2018

Receta Python 3 No. 8-3: Definir el Protocolo de Gestión de Contexto sobre un Objeto

1. Problema

Definir el protocolo de gestión de contexto sobre un objeto a través de la sentencia with.

2. Solución

Para lograr este soporte sobre un objeto es necesario implementar los métodos __enter__() y __exit__ dentro de la definición de una clase (Beazly, Jones, 2013).

3. Código Python 3

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

lunes, 3 de diciembre de 2018

Receta Python 3 No. 8-2: Personalizar el Formato de una Cadena de Caracteres

1. Problema

Personalizar el formato de una cadena de caracteres de un objeto a través de la función format().

2. Solución

En la definición de una clase se debe sobreescribir el método __format()__ para escribir una cadena de caracteres con formato (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python personalizacion_formato.py [enlace alternativo]:

Prueba de ejecución:

2018-11-30
11/30/2018
La fecha es 2018-11-30
La fecha es 11/30/2018

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

domingo, 2 de diciembre de 2018

Receta Python 3 No. 8-1: Cambiar la Representación de Cadena de Caracteres de Objetos de una Clase

1. Problema

Cambiar la representación de cadena de caracteres por defecto de objetos de una clase a una específica requerida.

2. Solución

Por medio de los métodos __repr__() y __str__() se puede cambiar la representación de cadena de caracteres de los objetos (o instancias) de una clase. El primer método, __repr__(), permite crear una representación textual para la recreación de una instancia; mientras que __str__() convierte la instancia actual en un texto (cadena de caracteres) (Beazly, Jones, 2013).

3. Código Python 3

Archivo cambiar_representacion.py [enlace alternativo]:

En las líneas 6-7 se especifica la representación de instancia para su recreación. Nótese aquí el uso del especificador !r para indicar que se debe usar __repr__() en lugar de __str__().

También debe destacarse el uso de self para invocar los atributos de instancia.


Prueba de ejecución:


Par(2, 3)
(2, 3)

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

sábado, 24 de noviembre de 2018

Receta Python 3 No. 7-12: Acceder Variables Definidas en un Closure

1. Problema

Acceder las variables definidas en la implementación de un closure.

2. Solución

Las variables de definidas en un closure no quedan expuestas a otras secciones del código. Para proveer acceso a estas variables será necesario crear funciones de acceso.

3. Código Python 3

Archivo Python acceso_variables_closure.py [enlace alternativo]:

Prueba de ejecución:

n = 0
n = 10
10

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

domingo, 18 de noviembre de 2018

Receta Python 3 No. 7-11: Funciones Callback En-línea

1. Problema

Se requiere que el código de invocación de funciones tenga apariencia de una secuencia de invocaciones procedurales.

2. Solución

Para solucionar este problema se usan generadores y corutinas.

3. Código Python 3

Archivo Python funciones_callback_en_linea.py [enlace alternativo]:

Prueba de ejecución:

5
Python 3.x
1
3
5
7
9
11
13
15
17
19
Cierre

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

jueves, 8 de noviembre de 2018

Receta Python 3 No. 7-10: Enviar Datos Adicionales en un Callback

1. Problema

Se requiere adicionar datos extras en la invocación de funciones de tipo callback: manejadores de eventos, completitud, entre otros.

2. Solución

Se pueden definir las funciones que actúan de forma directa sobre los argumentos pasados (tupla) a la función que ejecuta los argumentos, y que se encarga de ejecutar el callback con los resultados generados.

3. Código Python 3

Archivo Python datos_sobre_callback.py [enlace alternativo]:

Prueba de ejecución:

[1] generó: 5

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O

sábado, 29 de septiembre de 2018

Receta Python 3 No. 7-9: Reemplazar Clases de un Solo Método por Funciones

1. Problema

Se requiere convertir una clase con un único método, a parte del constructor __init__(), en una función; esto con el propósito de simplificar el código.

2. Solución

Por medio de los closures, una clase de este tipo se puede convertir en funciones. Un closure es una función que contiene 

3. Código Python 3

Archivo Python clases_como_funciones.py [enlace alternativo]:


Esta clase puede convertir en función; así:

Archivo Python clase_como_funcion.py [enlace alternativo]:

4. Literatura & Enlaces

Beazly D, Jones B. K. (2013). Python Cookbook, Third Edition. United States: O'Reilly Media.

O