Metaclasses

Advanced PythonOOPFree Lesson

Advertisement

Introduction

Metaclasses control class creation. They are the "classes of classes" in Python.

Basic Metaclass

class MyMeta(type):
    def __new__(mcs, name, bases, namespace):
        print(f"Creating class: {name}")
        return super().__new__(mcs, name, bases, namespace)

class MyClass(metaclass=MyMeta):
    pass
# Output: Creating class: MyClass

Enforcing Class Rules

class RequireMethods(type):
    def __new__(mcs, name, bases, namespace):
        cls = super().__new__(mcs, name, bases, namespace)
        # Ensure class has required methods
        if not hasattr(cls, 'validate'):
            raise TypeError(f"{name} must have validate() method")
        return cls

class Validator(metaclass=RequireMethods):
    def validate(self):
        pass  # Implementation

Singleton Pattern

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

Practice Problems

  1. Create a metaclass that adds version attribute
  2. Implement singleton using metaclass
  3. Track all classes created with metaclass
  4. Create metaclass that auto-registers classes
  5. Validate class attributes with metaclass

Advertisement

Need Expert Python Help?

Get personalized tutoring, project support, or professional consulting.

Advertisement