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