我想为用户创建一个Model Class。用户的数据存储在基于文档的数据库中,如couchdb或mongodb。 User类应该有一个装饰器,db中的字段可以通过不存在的类属性访问。例如
@DocumentDB()
class User(object):
def doSomething(self):
pass
def doSomethingElse(self):
pass
u = User('thisIsAUniqUserId')
print u.emailAddress
print u.lastName
我玩过python装饰器。操作现有函数并不是一件大事,但我如何能够捕获不存在的getter / setter来调用通过对象实例创建对db值的透明访问?
答案 0 :(得分:2)
您需要实施__getattr__(self, name)
method。
答案 1 :(得分:1)
答案 2 :(得分:1)
Django使用metaclasses to dynamically create models。虽然您的要求稍有不同,但相同的技术可能会起作用(可能比装饰者更好)。
答案 3 :(得分:0)
我想我找到了一个基于你的建议的解决方案:
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
它有效,但它是最pythoniastic方式?