当前位置: 首页 > 面试题库 >

将装饰器应用于类中的每个方法?

莫乐
2023-03-14
问题内容

我有装饰器@login_testuser应用于方法test_1()

class TestCase(object):
    @login_testuser
    def test_1(self):
        print "test_1()"

有没有我可以申请的方式@login_testuser每一个 前缀类的方法"test_"

换句话说,装饰将适用于test_1()test_2() 下面,但不是方法setUp()

class TestCase(object):
    def setUp(self):
        pass

    def test_1(self):
        print "test_1()"

    def test_2(self):
        print "test_2()"

问题答案:

在Python 2.6中,类装饰器无疑是必经之路。例如,这是用于此类任务的非常通用的代码:

import inspect

def decallmethods(decorator, prefix='test_'):
  def dectheclass(cls):
    for name, m in inspect.getmembers(cls, inspect.ismethod):
      if name.startswith(prefix):
        setattr(cls, name, decorator(m))
    return cls
  return dectheclass

而现在,

@decallmethods(login_testuser)
class TestCase(object):
    def setUp(self):
        pass

    def test_1(self):
        print "test_1()"

    def test_2(self):
        print "test_2()"

会得到你想要的东西。在Python 2.5或更低版本中,@decallmethods语法不适用于类修饰,但是如果使用完全相同的代码,则可以在语句结束
后立即 将其替换为以下class TestCase语句:

TestCase = decallmethods(login_testuser)(TestCase)


 类似资料:
  • 本文向大家介绍基于Python 装饰器装饰类中的方法实例,包括了基于Python 装饰器装饰类中的方法实例的使用技巧和注意事项,需要的朋友参考一下 title: Python 装饰器装饰类中的方法 comments: true date: 2017-04-17 20:44:31 tags: ['Python', 'Decorate'] category: ['Python'] --- 目前在中文网

  • 问题内容: 在Python中的lambda函数上使用装饰器有什么语法?例: 结果如下: 但是,当我尝试使用lambda进行相同操作时: 我得到这个: 我觉得这可能是通过允许将语句“插入” lambda使其更通用的好方法。但是,如果存在这样的功能,我不知道语法是什么。 问题答案:

  • 问题内容: 考虑这个小例子: 哪个打印 为什么参数(应该是Test obj实例)没有作为第一个参数传递给装饰函数? 如果我手动进行操作,例如: 它按预期工作。但是,如果我必须事先知道某个函数是否装饰,它就破坏了装饰器的全部目的。这里的模式是什么,还是我误会了什么? 问题答案: tl; dr 您可以通过将类作为描述符并返回部分应用的函数来解决此问题,该函数从中应用对象作为参数之一,如下所示 实际问题

  • 问题内容: 有没有办法像python风格那样装饰C ++中的函数或方法? 例如,使用宏: 要么 可能吗? 问题答案: 提供了我提出的解决方案的大多数构建块。 这是我建议的解决方案。 输出: ps 提供了一个可以进行功能调用以外的其他功能的地方。如果您想简单地传递至,可以使用:

  • 问题内容: 我想构造用作装饰器的类,并保留以下原则: 应该有可能在top 1函数上堆叠多个此类装饰器。 产生的函数名称指针应该与没有装饰器的相同函数没有区别,可能只是它是哪种类型/类。 除非装饰员实际要求,否则订购装饰员应该无关紧要。就是 独立的装饰器可以以任何顺序应用。 这是针对Django项目的,现在我正在处理的特定情况下,该方法需要2个装饰器,并显示为普通的python函数: @AutoTe

  • 问题内容: 尽管有很多关于将类用作装饰器的资源,但我找不到能处理装饰 方法 问题的资源。这个问题的目的是解决这个问题。我将发布自己的解决方案,但是当然也邀请其他所有人发布他们的解决方案。 标准装饰器类实现的问题是python不会创建装饰函数的绑定方法: 方法装饰者需要克服这一障碍。 要求 以前面示例中的类为例,预期将完成以下工作: 理想情况下,函数和签名以及类似属性也应保留。 问题答案: 通常,当