class Registry:
def __init__(self):
self.names = []
def register(self, func):
self.names.append(func.__name__)
return func
def apply(self, cls):
for name in self.names:
print(cls, name)
print(getattr(cls, name))
def hiding_decorator(fn):
def wrapper(*args, **kwargs):
print("do some logging etc.")
return fn(*args, **kwargs)
return wrapper
registry = Registry()
@registry.apply
class ModelA(object):
@hiding_decorator
@registry.register
def a_method(self):
pass
Y2xhc3MgUmVnaXN0cnk6CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5uYW1lcyA9IFtdCgogICAgZGVmIHJlZ2lzdGVyKHNlbGYsIGZ1bmMpOgogICAgICAgIHNlbGYubmFtZXMuYXBwZW5kKGZ1bmMuX19uYW1lX18pCiAgICAgICAgcmV0dXJuIGZ1bmMKCiAgICBkZWYgYXBwbHkoc2VsZiwgY2xzKToKICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLm5hbWVzOgogICAgICAgICAgICBwcmludChjbHMsIG5hbWUpCiAgICAgICAgICAgIHByaW50KGdldGF0dHIoY2xzLCBuYW1lKSkKCmRlZiBoaWRpbmdfZGVjb3JhdG9yKGZuKToKICAgIGRlZiB3cmFwcGVyKCphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgcHJpbnQoImRvIHNvbWUgbG9nZ2luZyBldGMuIikKICAgICAgICByZXR1cm4gZm4oKmFyZ3MsICoqa3dhcmdzKQogICAgcmV0dXJuIHdyYXBwZXIKCnJlZ2lzdHJ5ID0gUmVnaXN0cnkoKQpAcmVnaXN0cnkuYXBwbHkKY2xhc3MgTW9kZWxBKG9iamVjdCk6CiAgICBAaGlkaW5nX2RlY29yYXRvcgogICAgQHJlZ2lzdHJ5LnJlZ2lzdGVyCiAgICBkZWYgYV9tZXRob2Qoc2VsZik6CiAgICAgICAgcGFzcw==