클래스에서 데코레이터로 수행 할 수있는 사용 사례를 찾는 것은 쓸모 가 없습니다. 클래스에서 데코레이터로 수행 할 수있는 모든 것은 메타 클래스로 수행 할 수 있습니다. 등록의 예조차도. 이를 증명하기 위해 다음은 데코레이터를 적용하는 메타 클래스입니다.
파이썬 2 :
def register(target):
print 'Registring', target
return target
class ApplyDecorator(type):
def __new__(mcs, name, bases, attrs):
decorator = attrs.pop('_decorator')
cls = type(name, bases, attrs)
return decorator(cls)
def __init__(cls, name, bases, attrs, decorator=None):
super().__init__(name, bases, attrs)
class Foo:
__metaclass__ = ApplyDecorator
_decorator = register
파이썬 3 :
def register(target):
print('Registring', target)
return target
class ApplyDecorator(type):
def __new__(mcs, name, bases, attrs, decorator):
cls = type(name, bases, attrs)
return decorator(cls)
def __init__(cls, name, bases, attrs):
super().__init__(name, bases, attrs)
class Foo(metaclass=ApplyDecorator, decorator=register):
pass