我有两个类用作装饰器
class A:
"""This is a decorator"""
pass
class B:
"""This is also a decorator"""
pass还有一个我想退货的第三级,要么A要么B
class C:
def a(func):
return A
def b(func):
return B
@C.a
def some_func(some_arg):
pass
@C.b
def other_func(some_arg):
pass这种情况有可能发生吗?如果有,如何实现?
更新:问题是在创建装饰器时,在创建过程中执行‘调用’。我想访问一些配置,这些配置将在稍后设置。基本上,我要做的是返回包装器,返回包装器。
class C:
def __call__(func):
def wrapper(*args, **kwargs):
# Do something with global data
return func(*args, **kwargs)
return wrapper发布于 2019-10-14 11:11:38
如果您想让您的确切代码正常工作,只需将方法更改为属性:
class C:
a = A
b = B不过,这是否是一个好主意值得商榷。如果您想要一个装饰器来完成两种不同的事情之一,那么二阶装饰器(即返回装饰器的函数)可能更合适。
发布于 2019-10-14 11:23:01
你可以通过把C类改变成这样来完成这个任务。
class C:
def a(func):
return A(func)它实际上归结为理解,一个装潢师只是一个句法捷径。
@dec
def f():
pass与以下完全相同:
def f():
pass
f = dec(f)https://stackoverflow.com/questions/58375327
复制相似问题