Bienvenidos sean a este post, hoy hablaremos sobre este funcion del modulo de colecciones.
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)
>>>
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}
>>>
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}
>>>
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")
...
>>>
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})
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}
>>>
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
>>>
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.
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.


Donación
Es para mantenimento del sitio, gracias!
$1.00
