¿La modificación de __dict__ de un objeto para establecer sus propiedades se considera Pythonic?

7

Tengo una clase que infla los objetos de las filas encontradas en una base de datos (u otra fuente, por ejemplo, MongoDB, un archivo CSV, etc.). Para establecer las propiedades del objeto, hace algo como self.__dict__.update(**properties) o obj.__dict__.update(**properties) .

¿Esto se considera Pythonic? ¿Es este un buen patrón que debería seguir utilizando o se considera una forma incorrecta?

    
pregunta skyler 12.08.2013 - 20:53

1 respuesta

5

En Python 3.3, se agregó un nuevo tipo, types.SimpleNamespace() , y en la documentación se describe así:

  

El tipo es aproximadamente equivalente al siguiente código:

class SimpleNamespace:
    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)
    def __repr__(self):
        keys = sorted(self.__dict__)
        items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys)
        return "{}({})".format(type(self).__name__, ", ".join(items))

Note el método __init__ del tipo; no puede obtener un mejor respaldo de la técnica que la documentación de Python.

    
respondido por el Martijn Pieters 12.08.2013 - 21:49

Lea otras preguntas en las etiquetas