Anuncios

Bienvenidos sean a este post, hoy hablaremos sobre este funcion del modulo de colecciones.

Anuncios

Esta clase actua como una clase contenedora alrededor de los objetos de un diccionario, esto nos puede ser muy util para cuando necesitamos crear un diccionario propio con alguna funcionalidad nueva o modificada, para esto se toma una instancia de un diccionario como argumento y simula un diccionario que se mantiene en un diccionario normal y este es accesible por los atributos de datos de esta clase, vamos a ver un ejemplo:

>>> from collections import UserDict
>>> d = {'a': 1, 'b': 2, 'c': 3}
>>> ud = UserDict(d)
>>>
Anuncios

Como siempre importamos de las colecciones al tipo de dato, luego creamos un diccionario para trabajar con ella, nuestro siguiente paso sera crear el objeto de tipo UserDict que llamaremos ud y le pasaremos el diccionario que generamos anteriormente, veamos como asigno la informacion:

>>> print(ud.data)
{'a': 1, 'b': 2, 'c': 3}
>>>
Anuncios

Como pueden observar esto se creo correctamente y ahora tenemos un diccionario con la misma informacion que la original, si nosotros lo probamos veremos que la nueva copia se maneja como un diccionario comun y corriente:

>>> ud['d'] = 4
>>> print(ud.data)
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
>>> ud.pop('d')
4
>>> print(ud.data)
{'a': 1, 'b': 2, 'c': 3}
>>>
Anuncios

En este caso agregamos un nuevo elemento al diccionario, lo mostramos y verificamos que se agrego correctamente, despues usamos a pop para eliminarlo y vemos que tambien se ejecuto sin ningun error pero si nosotros queremos que no se pueda eliminar ningun elemento del diccionario? Aqui entra en accion esta clase, vamos a definir primero una nueva clase:

>>> class MiDicc(UserDict):
...     def __del__(self):
...             raise RuntimeError("No se permite borrar")
...     def pop(self, s = None):
...             raise RuntimeError("No se permite borrar")
...     def popitem(self, s = None):
...             raise RuntimeError("No se permite borrar")
... 
>>>
Anuncios

En esta clase recibiremos un valor de tipo UserDict, luego a traves de la defincion de tres funciones para cuando usemos un del, pop o popitem no hara la ejecucion correspondiente sino que generara un error con un mensaje personalizado en pantalla, nuestro siguiente paso sera crear un nuevo diccionario:

>>> d = MiDicc({'a': 1, 'b': 2, 'c': 3})
Anuncios

Con nuestro nuevo diccionario creado a traves de la nueva clase podemos comenzar a procesarlo como antes, veamos primero como esta cargada la informacion:

>>> print(d.data)
{'a': 1, 'b': 2, 'c': 3}
>>>
Anuncios

Ahora probemos de eliminar un dato dentro del diccionario mediante la funcion pop:

>>> d.pop('b')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in pop
RuntimeError: No se permite borrar
>>>
Anuncios

Como pueden ver ahora no se puede borrar y nos muestra una notificacion de que no permitimos borrar la informacion contenida en el diccionario, esto no afectaria al diccionario original sino simplemente al UserDict que generamos alrededor del mismo.

Anuncios

En resumen, hoy hemos visto UserDict, esta es una subclase de dict, la principal caracteristica que nos provee es poder crear un diccionario con nuestras propias reglas o personalizado sin afectar a la informacion original, esto es util dependiendo de la situacion que tengamos, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.00