함수에 적용 할 때 선택적 구성을 허용하는 데코레이터를 제공하고자합니다.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'
내가 장고보기위한 사용자 친화적 인 장식을 제공하기 위해 그것을 사용하고 싶습니다.
이 접근 방식은 오류없이 작동하지만 클래스가 자신의 사용자 정의 된 인스턴스를 데코레이터로 인스턴스화하는 정적 팩토리 메소드를 가질 수 있도록 허용하는 데 나쁜 점이 있습니까?
작동합니까? 그렇지 않은 경우 어떤 오류가 발생합니까? –
가끔 난독 화해서는 안되는 것들을 난독 화하지만 ... 그걸로 네가 잘하는 한 내가 너의 좋은 생각이야 ... –