Mostrando entradas con la etiqueta Capítulo 8. Mostrar todas las entradas
Mostrando entradas con la etiqueta Capítulo 8. Mostrar todas las entradas

lunes, 14 de enero de 2019

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

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