クラスのデコレータで行うことができユースケースをお探しすることは無益である- 何もクラスのデコレータで行うことができますメタクラスで行うことができます。登録の例ですら。それを証明するために、デコレータを適用するメタクラスを次に示します。
Python 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
Python 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