pythonintermediate

Metaclass

Advanced Python pattern: metaclass

python
class RegistryMeta(type):
    registry: dict[str, type] = {}

    def __new__(mcls, name, bases, ns):
        cls = super().__new__(mcls, name, bases, ns)
        if name != 'Plugin':
            mcls.registry[name.lower()] = cls
        return cls

class Plugin(metaclass=RegistryMeta):
    pass

class CsvPlugin(Plugin):
    pass

print(RegistryMeta.registry)

Use Cases

  • advanced programming
  • patterns

Tags

Related Snippets

Similar patterns you can reuse in the same workflow.