lunes, 14 de enero de 2019

Videoreceta Python No. 1-1: Concatenar Cadenas de Caracteres

Receta Python 3 No. 8-17: Crear una Instancia sin Invocar el Método __init__

1. Problema

Crear un objeto de una clase sin hacer uso del método __init__().

2. Solución

A través de la invocación del método __new__() es posible crear un objeto sin invocar el método __init__(). A la hora de crear una instancia se se invoca el método __new__() con el nombre de la clase (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python instanciar_sin_init.py [enlace alternativo]:

Prueba de ejecución:

2019-1-14

4. Literatura & Enlaces

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

O

martes, 8 de enero de 2019

Receta Python 3 No. 8-16: Definir Más de un Constructor en una Clase

1. Problema

Se requiere escribir una clase que tenga más de un constructor.

2. Solución

Para definir una clase con más de un constructor es necesario definir uno o más métodos de clase (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python contructores_extra.py [enlace alternativo]:

Prueba de ejecución.

2019-1-8

2019-1-8

4. Literatura & Enlaces

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


O

lunes, 7 de enero de 2019

Receta Python 3 No. 8-15: Delegar el Acceso a un Atributo

1. Problema

Delegar el acceso a un atributo de una clase sobre otra.

2. Solución

Por medio del método __getattr__() es posible obtener todos los atributos de instancia definidos en una clase padre sobre la implementación de una sublase (Beazly, Jones, 2013).

3. Código Python 3

Archiv Python delegar_acceso_atributo.py [enlace alternativa]:

Prueba de ejecución:

25
5
1

4. Literatura & Enlaces

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

O

Receta Python 3 No. 8-14: Implementar Contenedores Personalizados

1. Problema

Escribir una clase que actúe de forma análoga a una estructura contenedora (i.e., lista o diccionario).

2. Solución

A través de la librería collections provee un conjunto de clases abstractas para la definición de estructuras contenedoras (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python contenedor_personalizado.py [enlace alternativo]:

Prueba de ejecución:

[2, 3, 5]
2
5
[-2, 2, 3, 5]
[2, 3, 5]
True
4

-2  2  3  5 

4. Literatura & Enlaces

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


O

Receta Python 3 No. 8-13: Implementar un Modelo de Datos o un Sistema de Tipos

1. Problema

Definir un modelo de datos para crear restricciones sobre los tipos de datos y los valores que se pueden asignar sobre ellos.

2. Solución

La solución a este problema consiste en hacer validaciones sobre la creación y asignación de atributos al momento de definir la estructura de datos (Beazly, Jones, 2013). La validación se debe realizar por cada atributo.

3. Código Python 3

Archivo Python modelo_datos.py [enlace alternativo]:

Prueba de ejecución:

Bluetooth Griffin
...
Process finished with exit code 1

4. Literatura & Enlaces

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

O

domingo, 6 de enero de 2019

Receta Python 3 No. 8-12: Definir una Interfaz o una Clase Abstracta

1. Problema

Se require crear una clase abstracta para la definición de métodos comunes en una jerarquía de herencia.

2. Solución

El módulo abc provee artefactos para la creación y definición de clases abstractas (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python clase_abstracta.py [enlace alternativa]:

Prueba de ejecución:

TypeError: Can't instantiate abstract class IStream with abstract methods escribir, leer

4. Literatura & Enlaces

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

O

Receta Python 3 No. 8-11: Simplificar la Inicialización de Estructuras de Datos

1. Problema

Remover código repetido cuando se definen clases que sirven como estructuras de datos.

2. Solución

Definir una superclase que sirva como estructura básica que cargue dinámica los atributos de las subclases (Beazly, Jones, 2013).

3. Código Python 3

Archivo Python inicializacion_estructura.py [enlace alternativo]:

Prueba de ejecución:

...
TypeError: Se esperan 3 argumentos

4. Literatura & Enlaces

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


O

Receta Python 3 No. 8-10: Usar Propiedades Calculadas de Carga Tardía

1. Problema

Definir propiedades de carga tardía que una vez accedidas el valor se compute.

2. Solución

Por medio de una clase de tipo descriptor es posible definir propiedades computadas de forma tardía.

3. Código Python

Archivo Python propiedad_calculo_tardio.py [enlace alternativo]:

Prueba de ejecución:

3.0
Computando el área...
28.274333882308138
28.274333882308138
Computando el perímetro...
18.84955592153876
18.84955592153876

Nótese en la salida que las cadenas Computando el área... y Computando el perímetro... sólo se muestra una vez.

4. Literatura & Enlaces

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

O