2
我想提供一个装饰器,它允许在应用于某个功能时进行可选配置。Python中的可定制装饰器
一个简单的实现如下:
import functools
class Deco(object):
config = {'message': 'hello'}
def __init__(self, func):
self.func = func
functools.wraps(func)(self)
def __call__(self, *args, **kwargs):
print self.config['message']
return self.func(*args, **kwargs)
@classmethod
def customize(cls, **kwargs):
"""Return a customized instance of this class. """
return type(cls.__name__, (Deco,), {'config': kwargs})
@Deco
def add(a, b):
return a + b
@Deco.customize(message='bye')
def sub(a, b):
return a - b
>>> add(1, 2)
'hello'
>>> sub(2, 1)
'bye'
我想用它来Django的观点提供了人性化的装饰。
这种方法没有错误,但是有什么不好的让一个类有一个静态工厂方法实例化它自己的自定义实例,作为一个装饰器?
它工作吗?如果不是,你会得到什么错误? – 2012-10-17 16:34:03
有时它混淆了不应该被混淆的东西...但只要你的罚款那么你的好我认为... –