首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建带有装饰器属性的装饰器?

如何创建带有装饰器属性的装饰器?
EN

Stack Overflow用户
提问于 2022-03-03 06:44:41
回答 2查看 78关注 0票数 0

我见过这样的装潢师,我是如何创作的呢?

代码语言:javascript
复制
@deco.deco_attribute
def add(a, b):
    return a + b

我知道如何创建一个装潢师,看起来像这样

代码语言:javascript
复制
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

甚至还看到了向装饰器添加参数的例子,这些都可以使用嵌套函数来完成。

代码语言:javascript
复制
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

我所知道的其他变体包括嵌套多个装饰器或将类创建为装饰器,或为类创建作为装饰器的函数。

但是如何创造上面提到的装饰师呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-03 07:08:34

您可以使用类并将每个装饰器都放入其中。

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2022-03-03 06:56:48

我认为这只是你如何做好进口的问题。在您的示例中,您将只导入模块import deco,然后像使用任何其他函数一样访问该模块中的装饰器。我经常看到模块正在导入的一个地方,而不是装饰器是最热的固定装置:

代码语言:javascript
复制
import pytest

@pytest.fixture
def my_fixture():
...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71333063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档