# Python Metaclasses Descriptors

> Use when implementing metaclasses and descriptors.

- Skill: `loopyluci/python-metaclasses-descriptors` (Agent Skill)
- Install (CLI): `npx skillmds@latest add loopyluci/python-metaclasses-descriptors`
- Raw SKILL.md: https://api.skillmd.com/api/skills/loopyluci/python-metaclasses-descriptors/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: MIT
- Author: LoopyLuci (https://skillmd.com/u/loopyluci)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/loopyluci/python-metaclasses-descriptors

---


# Metaclasses and Descriptors

Implementing Python metaclasses and descriptors — from __new__ to descriptor protocol, __init_subclass__, and practical metaclass patterns.

## When to Use

- Building DSLs and APIs with metaclasses
- Implementing property-like descriptors
- Automatic registration of subclasses
- ORM-like model definitions

## Metaclass Patterns

```python
class RegistryMeta(type):
    registry = {}
    def __new__(mcs, name, bases, namespace):
        cls = super().__new__(mcs, name, bases, namespace)
        if name != 'BaseModel':
            mcs.registry[name] = cls
        return cls

class BaseModel(metaclass=RegistryMeta): pass

class ValidatedField:
    """Descriptor pattern."""
    def __init__(self, validator): self.validator = validator
    def __set_name__(self, owner, name): self.name = name
    def __get__(self, obj, objtype=None): return obj.__dict__.get(self.name)
    def __set__(self, obj, value):
        self.validator(value)
        obj.__dict__[self.name] = value
```

## Verification Checklist

- [ ] Metaclass __new__ vs __init__ understood
- [ ] Descriptor protocol (__get__, __set__, __delete__)
- [ ] __set_name__ for automatic naming
- [ ] __init_subclass__ as metaclass alternative (Python 3.6+)
- [ ] Practical use cases (registries, validation, ORMs)

