class Registry:
def __init__(self):
self.registered = {}
def add(self, name):
def decorator(function):
self.registered[name] = function
return function
return decorator
def __call__(self, name):
return self.registered[name]
RegistryOne = Registry()
RegistryTwo = Registry()
@RegistryOne.add("the_one")
class Example1:
def __init__(self, scale_factor=1):
self.scale_factor = scale_factor
@RegistryOne.add("the_two")
class Example2:
def __init__(self, scale_factor=2):
self.scale_factor = scale_factor
if __name__ == "__main__":
the_one = RegistryOne("the_one")()
print(f"{the_one.scale_factor=}")
assert RegistryOne.registered != RegistryTwo.registered
Y2xhc3MgUmVnaXN0cnk6CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5yZWdpc3RlcmVkID0ge30KCiAgICBkZWYgYWRkKHNlbGYsIG5hbWUpOgogICAgICAgIGRlZiBkZWNvcmF0b3IoZnVuY3Rpb24pOgogICAgICAgICAgICBzZWxmLnJlZ2lzdGVyZWRbbmFtZV0gPSBmdW5jdGlvbgogICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24KICAgICAgICByZXR1cm4gZGVjb3JhdG9yCgogICAgZGVmIF9fY2FsbF9fKHNlbGYsIG5hbWUpOgogICAgICAgIHJldHVybiBzZWxmLnJlZ2lzdGVyZWRbbmFtZV0KClJlZ2lzdHJ5T25lID0gUmVnaXN0cnkoKQpSZWdpc3RyeVR3byA9IFJlZ2lzdHJ5KCkKCkBSZWdpc3RyeU9uZS5hZGQoInRoZV9vbmUiKQpjbGFzcyBFeGFtcGxlMToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzY2FsZV9mYWN0b3I9MSk6CiAgICAgICAgc2VsZi5zY2FsZV9mYWN0b3IgPSBzY2FsZV9mYWN0b3IKCgpAUmVnaXN0cnlPbmUuYWRkKCJ0aGVfdHdvIikKY2xhc3MgRXhhbXBsZTI6CiAgICBkZWYgX19pbml0X18oc2VsZiwgc2NhbGVfZmFjdG9yPTIpOgogICAgICAgIHNlbGYuc2NhbGVfZmFjdG9yID0gc2NhbGVfZmFjdG9yCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIHRoZV9vbmUgPSBSZWdpc3RyeU9uZSgidGhlX29uZSIpKCkKICAgIHByaW50KGYie3RoZV9vbmUuc2NhbGVfZmFjdG9yPX0iKQoKICAgIGFzc2VydCBSZWdpc3RyeU9uZS5yZWdpc3RlcmVkICE9IFJlZ2lzdHJ5VHdvLnJlZ2lzdGVyZWQ=