不只是装饰,不。但是,元类可以在创建类后自动使用它。如果您的
register装饰器仅记录了元类应该做什么,则可以执行以下操作:
registry = {}class RegisteringType(type): def __init__(cls, name, bases, attrs): for key, val in attrs.iteritems(): properties = getattr(val, 'register', None) if properties is not None: registry['%s.%s' % (name, key)] = propertiesdef register(*args): def decorator(f): f.register = tuple(args) return f return decoratorclass MyClass(object): __metaclass__ = RegisteringType @register('prop1','prop2') def my_method( arg1,arg2 ): pass @register('prop3','prop4') def my_other_method( arg1,arg2 ): passprint registry印刷
{'MyClass.my_other_method': ('prop3', 'prop4'), 'MyClass.my_method': ('prop1', 'prop2')}


