Python 如何使用实例方法作为装饰器?
下面的代码如何工作,而不将函数(func)传递给对象方法task() 例如,将其与以下内容进行比较。向给定函数添加附加功能。在上面的示例中,我无法理解func是如何传递给task()方法的 在这里:Python 如何使用实例方法作为装饰器?,python,python-3.x,Python,Python 3.x,下面的代码如何工作,而不将函数(func)传递给对象方法task() 例如,将其与以下内容进行比较。向给定函数添加附加功能。在上面的示例中,我无法理解func是如何传递给task()方法的 在这里: @pipeline.task() def第一个_任务(x): 返回x+1 pipeline.task()调用pipeline的task方法。这将返回函数内部 @表示此函数(内部)将用作装饰器。因此调用internal,随后的函数定义def first\u task…作为其参数func传递 inte
@pipeline.task()
def第一个_任务(x):
返回x+1
pipeline.task()
调用pipeline
的task
方法。这将返回函数内部
@
表示此函数(内部
)将用作装饰器。因此调用internal
,随后的函数定义def first\u task…
作为其参数func
传递
internal
将函数func
添加到管道的任务列表中
你可以这样读:
internal=pipeline.task()
#inner是由pipeline.task()创建的函数
#将函数添加到管道的任务列表
@内在的
def第一个_任务(x):
返回x+1
而decorator语法使其行为类似于:
internal=pipeline.task()
def第一个_任务(x):
返回x+1
第一个任务=内部(第一个任务)
您正在传递一个函数。使用def first_task(x)
定义的函数是作为func
传递的函数。这就是装饰师所做的。为什么下面给出了错误?self:pipeline那么第一个任务如何作为函数传递,而不作为参数传递给任务方法<代码>定义任务(自身、功能):
class Pipeline:
def __init__(self):
self.tasks = list()
def task(self):
def inner(func):
self.tasks.append(func)
return func
return inner
pipeline = Pipeline()
@pipeline.task()
def first_task(x):
return x + 1
print(pipeline.tasks)
def logger(func):
def inner(*args):
print('Calling function: {}'.format(func.__name__))
print('With args: {}'.format(args))
return func(*args)
return inner
@logger
def add(a, b):
return a + b