fork download
  1. class Registry:
  2. def __init__(self):
  3. self.registered = {}
  4.  
  5. def add(self, name):
  6. def decorator(function):
  7. self.registered[name] = function
  8. return function
  9. return decorator
  10.  
  11. def __call__(self, name):
  12. return self.registered[name]
  13.  
  14. RegistryOne = Registry()
  15. RegistryTwo = Registry()
  16.  
  17. @RegistryOne.add("the_one")
  18. class Example1:
  19. def __init__(self, scale_factor=1):
  20. self.scale_factor = scale_factor
  21.  
  22.  
  23. @RegistryOne.add("the_two")
  24. class Example2:
  25. def __init__(self, scale_factor=2):
  26. self.scale_factor = scale_factor
  27.  
  28.  
  29. if __name__ == "__main__":
  30. the_one = RegistryOne("the_one")()
  31. print(f"{the_one.scale_factor=}")
  32.  
  33. assert RegistryOne.registered != RegistryTwo.registered
Success #stdin #stdout 0.05s 9672KB
stdin
Standard input is empty
stdout
the_one.scale_factor=1