我对decorators是新手,我正在尝试创建一个decorators,它在方法执行之后执行self.commit()
。你知道吗
我对争论有意见。方法commit(decorator)在类内部。你知道吗
def commit(func):
def func_wrapper(func):
func()
self.commit()
return func_wrapper
我做了一个测试方法:
@commit
def h(self):
pass
并称之为:
db = database()
db.create_tables()
db.h()
错误:TypeError: commit() takes exactly 2 arguments (1 given)
我知道这个错误是因为它不是一个静态方法而引起的,所以我试着把self
参数放在那里,但是仍然出现了错误。你知道吗
你知道问题出在哪里吗?你知道吗
您需要将实际参数传递给包装函数,并使用该参数调用修饰函数:
为方法构建修饰符的方法与为函数构建修饰符的方法相同,但是您需要考虑
self
包装函数:更新:
更好的方法是使decorator对函数和方法有用。这可以通过将
*args
和**kwargs
作为包装器的参数来实现,这样它就可以接受任意数量的参数和关键字参数。你知道吗希望这有帮助:)
您需要为函数传递参数,正如前面的帖子所说。但是您很可能不想限制函数在decorator中采用的参数,请使用
*args
,**kwargs
。最后,使用functools.wraps保存原始函数元数据是个好主意。你知道吗完整示例:
相关问题 更多 >
编程相关推荐