Python Metaclasses
Control class creation with metaclasses.
Advanced class customization.
What are Metaclasses?
Classes that create classes.
```python # Every class has a metaclass class MyClass: pass
print(type(MyClass)) # <class 'type'> ```
Simple Metaclass
```python class Meta(type): def __new__(cls, name, bases, attrs): # Add method to every class attrs['greet'] = lambda self: print(f"Hi from {name}!") return super().__new__(cls, name, bases, attrs)
class MyClass(metaclass=Meta): pass
obj = MyClass() obj.greet() # Hi from MyClass! ```
Validation Metaclass
```python class ValidationMeta(type): def __new__(cls, name, bases, attrs): # Check if validate method exists if 'validate' not in attrs: raise TypeError(f"{name} must have validate method") return super().__new__(cls, name, bases, attrs)
class User(metaclass=ValidationMeta): def validate(self): pass # Validation logic ```
Singleton Pattern
```python class Singleton(type): _instances = {} def __call__(cls, *args, **kwargs): if cls not in cls._instances: cls._instances[cls] = super().__call__(*args, **kwargs) return cls._instances[cls]
class Database(metaclass=Singleton): pass
db1 = Database() db2 = Database() print(db1 is db2) # True (same instance) ```
Remember
- Metaclasses control class creation - Use sparingly - very advanced - Consider alternatives first