pythonadvanced

Abc Registry

Advanced Python pattern: abc-registry

python
from abc import ABC, abstractmethod

class Handler(ABC):
    registry: dict[str, type['Handler']] = {}

    def __init_subclass__(cls, key: str, **kwargs):
        super().__init_subclass__(**kwargs)
        Handler.registry[key] = cls

    @abstractmethod
    def handle(self, data: str) -> str: ...

class Upper(Handler, key='upper'):
    def handle(self, data: str) -> str:
        return data.upper()

print(Handler.registry['upper']().handle('hi'))

Use Cases

  • advanced programming
  • patterns

Tags

Related Snippets

Similar patterns you can reuse in the same workflow.