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
有時它混淆了不應該被混淆的東西...但只要你的罰款那麼你的好我認爲... –