Diccionarios a lo Javascript en Python

Los "diccionarios" en javascript tienen una propiedad curiosa, que se pueden manejar los elementos como si fuera un array índicando el índice (con una variable) o como si fuera un atributo del objeto:

> var x = {}
> x
{}
> x.name = "joe"
'joe'
> x
{ name: 'joe' }
> x['name']
'joe'
> x.name
'joe'
>

En python los diccionarios no tienen esa propiedad, pero es fácil de hacer una clase que sí, apoyandose en que cada objeto tiene un diccionario interno, self.dict que almacena sus atributos, jugando con él (al menos si no nos metemos con los atributos que define la clase :P)...

# JS-like dictionary
class jsdict:

    # Request an item
    def __getitem__(self, i):
        try:
            return self.__dict__[i]
        except KeyError:
            raise AttributeError()

    # Set an item
    def __setitem__(self, i, x):
        self.__dict__[i] = x

    # Delete an item
    def __delitem__(self, i):
        del self.__dict__[i]


    # Return as a string
    def __str__(self):  return self.__dict__.__str__()

    # Returns the dict representation
    def __repr__(self): return self.__dict__.__repr__()

(Quizá faltaría un eq(), pero realmente no aportaría nada al ejemplo)

jsdict.py (con unas líneas de prueba)

Saludos

`true` o `false`, cuantas variaciónes son posibles? » « One liners (14): sacar un número decimal de /dev/random en bash