Python › Metaclasses & Class Customization

Why do most Python developers rarely need to write a custom metaclass in everyday code?

Beginner

Answer

Metaclasses solve problems at the class-creation level, but most common needs -- validation, registration, adding methods, enforcing interfaces -- are better and more simply solved with class decorators, __init_subclass__, descriptors, or plain inheritance. Metaclasses add real complexity and can conflict with other metaclasses, so the Python community favors reaching for them only when these simpler tools genuinely can't express the requirement.
# Simpler alternative to a metaclass for registration:
class Plugin:
    registry = []
    def __init_subclass__(cls, **kwargs):
        super().__init_subclass__(**kwargs)
        cls.registry.append(cls)
Real-world example A code reviewer suggests replacing a newly-introduced custom metaclass with __init_subclass__ since the team's actual need (auto-registering subclasses) doesn't require full metaclass power.

Common follow-ups: What's the famous Tim Peters quote about metaclasses?;What are legitimate cases that still require a metaclass?