我是装饰器的新手,正在尝试创建一个装饰器,该装饰器在执行该方法后执行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()恰好接受2个参数(给定1个)
我确实知道由于不是静态方法而引发了错误,因此我尝试在此处放置自变量,但仍然出现错误.
您知道问题出在哪里吗?
解决方法:
您可以用与函数相同的方式为方法构建装饰器,但是您需要将自身考虑到包装函数:
def commit(func):
def func_wrapper(self):
func(self)
self.commit()
return func_wrapper
更新:
更好的方法是使装饰器对功能和方法有用.这可以通过将* args和** kwargs作为包装器的参数来完成,因此它可以接受任意数量的参数和关键字参数.
希望这可以帮助 :)