[英]How to create a decorator with decorator attributes?
我见过这样的装饰器,我该如何创建它们?
@deco.deco_attribute
def add(a, b):
return a + b
我知道如何创建一个装饰器,它看起来像这样
import time
def timer(func):
def wrapper(*args, **kwargs):
time_in = time.time()
x = func(*args, **kwargs)
time_out = time.time()
print(time_out - time_in)
return x
return wrapper
@timer
def add(a, b):
return a + b
甚至看过将 arguments 添加到装饰器的示例,这可以使用嵌套函数来完成。
def timer(*deco_args):
def inner(func):
def wrapper(*args, **kwargs):
time_in = time.time()
x = func(*args, **kwargs)
time_out = time.time()
print(*deco_args, time_out - time_in)
return x
return wrapper
return inner
@timer(2, 3)
def add(a, b):
return a + b
我知道的其他变体包括嵌套多个装饰器或创建 class 作为装饰器,或创建 function 作为 class 的装饰器。
但是如何创建上面提到的装饰器呢?
您可以使用 class 并将所有装饰器放入其中
class deco():
@staticmethod
def time_1(func):
def inner():
return 0
return inner
@staticmethod
def time_2(func):
def inner():
return 0
return inner
@deco.time_1
def test():
return 4+5
我认为这只是您如何进行导入的问题。 在您的示例中,您将只导入模块import deco
,然后像访问任何其他 function 一样访问该模块内的装饰器。我经常看到导入模块而不是装饰器的一个地方是 pytest 固定装置:
import pytest
@pytest.fixture
def my_fixture():
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.