with decorators decoradores python properties model couchdb decorator

decorators - Python Decorator también para atributos indefinidos



python decoradores (4)

Me gustaría crear una clase de modelo para un usuario. Los datos del usuario se almacenan en una base de datos basada en documentos como couchdb o mongodb. El usuario de la clase debe tener un decorador y los campos ind el db son accesibles sobre los atributos de clase realmente no existentes. Por ejemplo

@DocumentDB() class User(object): def doSomething(self): pass def doSomethingElse(self): pass u = User(''thisIsAUniqUserId'') print u.emailAddress print u.lastName

He jugado con decoradores de pitones. La manipulación de funciones existentes no es una gran cosa, pero ¿cómo puedo captar la convocatoria de no existentes getters / setters para crear un acceso transparente a los valores db a través de la instancia del objeto?


Creo que encontré una solución basada en tus sugerencias:

def DocumentDB(object): class TransparentAttribute: def __init__(self, *args, **kargs): self.wrapped = object(*args, **kargs) def __getattr__(self, attrname): return "Any Value" return TransparentAttribute @DocumentDB class User(object): def doSomething(self): pass def doSomethingElse(self): pass u = User() print u.emailAddress print u.lastName

Funciona, pero ¿es la forma más pythoniastic?




Necesita implementar el __getattr__(self, name) .