[英]How create decorator inside a class?
I want create a simple decorator function that get in input a func e add some methode before.我想创建一个简单的装饰器 function 在输入函数之前添加一些方法。 Here an example:
这里有一个例子:
class A:
def beforeWriteOracle(func):
def wrapper(self, func):
self.dbOracle.truncateTable(self.oracle_final_table)
func(self.mylist)
return wrapper
@beforeWriteOracle
def writeDataToOracle(self, writeDataToOracleRequestList):
return self.executeMethod(self.writeDataToOracleImpl, writeDataToOracleRequestList, threaded, False)
self.writeDataToOracle(self, writeDataList)
but i have error:但我有错误:
"beforeWriteOracle() missing 1 required positional argument: 'func'"
“beforeWriteOracle() 缺少 1 个必需的位置参数:‘func’”
How use correctly decorator for my case?如何为我的案例正确使用装饰器?
thanks谢谢
You don't need to (or want to) pass func
as an argument to the wrapper;您不需要(或不想)将
func
作为参数传递给包装器; the wrapper should take the same arguments that function you are decorating takes, since it's going to "become" that function.包装器应该采用与您正在装饰的 function 相同的 arguments,因为它将“变成”function。
func
itself is available as a non-local variable inside wrapper
, which is a closure : it retains the value passed to beforeWriteOracle
even after beforeWriteOracle
exits. func
本身可以作为wrapper
内部的非局部变量使用,这是一个闭包:即使在beforeWriteOracle
退出之后,它也会保留传递给beforeWriteOracle
的值。
def beforeWriteOracle(func):
def wrapper(self, *args, **kwargs):
self.dbOracle.truncateTable(self.oracle_final_table)
func(self, *args, **kwargs)
return wrapper
@beforeWriteOracle
def writeDataToOracle(self, writeDataToOracleRequestList):
return self.executeMethod(self.writeDataToOracleImpl, writeDataToOracleRequestList, threaded, False)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.