【发布时间】:2023-04-05 06:15:01
【问题描述】:
正如我在this 上一篇文章中提到的。我正在尝试创建一个装饰器,它执行以下操作:
装饰类表示基于文档的数据库(如 CouchDB 或 MongoDB)中的文档。 Decorator 接受 on 参数,该参数是此类数据库的连接器实例。模型类(在此示例中为用户)会自动将未定义的属性映射到数据库中的字段。
现在我有点卡住了:-/ 提到的东西都在工作。但现在我不能从模型类中调用任何方法。我收到以下错误。
TypeError:未绑定的方法 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
【问题讨论】:
-
您能否显示错误的完整回溯,包括它发生的行?
-
@DavidRobinson 我运行了相同的代码,得到了简单的
Traceback (most recent call last): File "<module1>", line 52, in <module> TypeError: unbound method myfunc() must be called with User instance as first argument (got nothing instead)
(在线u.myfunc()
)
标签:
python
class
methods
couchdb
decorator
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 装饰类不允许方法调用。为什么? - Python技术站