python-方法执行后提交-装饰器

我是装饰器的新手,正在尝试创建一个装饰器,该装饰器在执行该方法后执行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作为包装器的参数来完成,因此它可以接受任意数量的参数和关键字参数.

希望这可以帮助 :)

上一篇:【设计模式】java设计模式目录


下一篇:javascript-具有AOT的类型提供程序中的角度条件