【发布时间】:2016-07-04 05:22:45
【问题描述】:
我有一个装饰器
def deco(func):
def inner(params):
#< DO STUFF WITH func >
return inner
还有一个基类
class GenericClass:
def __init__(self,value):
self.value = value
def method(self,params):
print 'NOT IMPLEMENTED YET'
def other_method(self):
print 'GOOD TO GO'
我希望能够在 GenericClass 的子类上装饰“方法”方法,例如检查输入/输出或处理异常(方法“方法”将被覆盖)
我想做的是……
class ChildClass(GenericClass):
@deco
def method(self,params):
#< NEW METHOD >
我不是专家级的 Python 开发人员,该级别的所有文档都非常混乱(即元类、装饰器中的微妙之处、__call__ 方法等),我没有在 SO 上找到解决方案。
【问题讨论】:
-
不确定这里有什么问题,如果你的装饰器是一个普通的函数,那么用它装饰任何东西都不应该有问题。
-
当我使用装饰器时,它也会将“self”作为内部函数的参数。我想让我的装饰器足够通用,以便能够在未嵌入类的函数中使用它。
-
我已经更新了下面的答案。我猜你不要在
deco中使用params,否则,你必须使用args[index]访问它们,其中索引可以移动,即函数的第一个实际参数的索引为0,方法的索引为1。为简单起见,您可以使用负索引,但前提是参数的数量是恒定的