我试图弄清楚如何获取方法上所有装饰器的名称。我已经可以获取方法名称和文档字符串,但是无法弄清楚如何获取装饰器列表。
如果可以更改从中调用装饰器的方式
class Foo(object):
@many
@decorators
@here
def bar(self):
pass
至
class Foo(object):
@register(many,decos,here)
def bar(self):
pass
那么您可以通过以下方式注册装饰器:
def register(*decorators):
def register_wrapper(func):
for deco in decorators[::-1]:
func=deco(func)
func._decorators=decorators
return func
return register_wrapper
例如:
def many(f):
def wrapper(*args,**kwds):
return f(*args,**kwds)
return wrapper
decos = here = many
class Foo(object):
@register(many,decos,here)
def bar(self):
pass
foo=Foo()
在这里,我们访问装饰器的元组:
print(foo.bar._decorators)
# (<function many at 0xb76d9d14>, <function decos at 0xb76d9d4c>, <function here at 0xb76d9d84>)
在这里,我们仅打印装饰器的名称:
print([d.func_name for d in foo.bar._decorators])
# ['many', 'decos', 'here']
问题内容: 我正在尝试装饰类中的方法,但是python抛出错误。我的课看起来像这样: : Python抛出以下错误 我要去哪里玩? 问题答案: Python自动将类实例作为参考传递。(在所有类方法中都可以看到的参数)。 您可以这样做:
问题内容: 考虑这个小例子: 哪个打印 为什么参数(应该是Test obj实例)没有作为第一个参数传递给装饰函数? 如果我手动进行操作,例如: 它按预期工作。但是,如果我必须事先知道某个函数是否装饰,它就破坏了装饰器的全部目的。这里的模式是什么,还是我误会了什么? 问题答案: tl; dr 您可以通过将类作为描述符并返回部分应用的函数来解决此问题,该函数从中应用对象作为参数之一,如下所示 实际问题
本文向大家介绍基于Python 装饰器装饰类中的方法实例,包括了基于Python 装饰器装饰类中的方法实例的使用技巧和注意事项,需要的朋友参考一下 title: Python 装饰器装饰类中的方法 comments: true date: 2017-04-17 20:44:31 tags: ['Python', 'Decorate'] category: ['Python'] --- 目前在中文网
问题内容: 我正在尝试编写一个使用装饰器函数的python类,该装饰器函数需要实例状态的信息。这可以按预期工作,但是如果我将装饰器明确设为staticmetod,则会出现以下错误: 为什么? 这是代码: 而且,如果我只删除该行,一切都会正常,但是我不明白为什么。它不应该作为第一个论点吗? 问题答案: 这不是应该使用的方式。 对象是返回包装对象的描述符,因此它们仅在以身份访问时才起作用。例 版画 在
问题内容: 尽管有很多关于将类用作装饰器的资源,但我找不到能处理装饰 方法 问题的资源。这个问题的目的是解决这个问题。我将发布自己的解决方案,但是当然也邀请其他所有人发布他们的解决方案。 标准装饰器类实现的问题是python不会创建装饰函数的绑定方法: 方法装饰者需要克服这一障碍。 要求 以前面示例中的类为例,预期将完成以下工作: 理想情况下,函数和签名以及类似属性也应保留。 问题答案: 通常,当
问题内容: 如何获取用@ decorator2装饰的给定类A的所有方法? 问题答案: 方法1:基本注册装饰器 我已经在这里回答了这个问题:在Python中通过数组索引调用函数=) 方法2:源代码解析 如果您无法控制 类 定义,而 _ 类 _定义 是您想假设的一种解释,则这是 不可能的 (没有代码的读取- 反射),因为装饰器可以是无操作的装饰器(例如在我的链接示例中)仅返回未修改的函数。(但是,如果