正如我在上一篇文章中提到的。我试图创建一个装饰器,它执行以下操作:
装饰类表示基于文档的数据库(如 CouchDB 或 MongoDB)中的文档。Decorator 接受 on 参数,该参数是此类数据库的连接器实例。模型类(在此示例中为用户)会自动将未定义的属性映射到数据库中的字段。
现在我有点卡住了:-/提到的东西都在工作。但现在我不能从模型类中调用任何方法。我收到以下错误。
类型错误:必须使用用户实例作为第一个参数调用未绑定的方法 myfunc()(什么都没有)
class Connector(object):
def readvar(self, var):
data = {"emailAddress":"jack.bauer@ctu.org", "lastName":"Bauer"}
return data[var]
class DocumentDB(object):
def __init__(self,connector):
self.connector = connector
def __call__(self, *args, **kargs):
_c = self.connector
class TransparentAttribute:
def __getattr__(self, attrname):
try:
return _c.readvar(attrname)
except:
return getattr(args[0], attrname)
return TransparentAttribute
c = Connector()
@DocumentDB(c)
class User(object):
username = "JackBauer"
def doSomething(self):
print "bla bla"
def doSomethingElse(self):
pass
def myfunc(self):
print "afadsadsf adsf asdf asdf"
u = User()
u.myfunc() # Does not work!!!
print u.emailAddress
print u.lastName
print u.username