Advanced Python Patterns

Python PatternsFree Lesson

Advertisement

Advanced Python Patterns

Metaclasses, descriptors, and advanced OOP patterns.

Overview

Master advanced patterns.

Metaclass Pattern

class ValidatedMeta(type):
    def __new__(cls, name, bases, attrs):
        for key, value in attrs.items():
            if hasattr(value, 'validate'):
                attrs[key] = property(
                    lambda self, v=value: getattr(self, f'_{v.name}', None),
                    lambda self, v, key=key: setattr(self, f'_{key}', v)
                )
        return super().__new__(cls, name, bases, attrs)

class User(metaclass=ValidatedMeta):
    name = str
    age = int

Descriptor Pattern

class TypeChecked:
    def __init__(self, expected_type):
        self.expected_type = expected_type
    
    def __set_name__(self, owner, name):
        self.name = name
    
    def __get__(self, obj, objtype=None):
        if obj is None:
            return self
        return getattr(obj, f'_{self.name}', None)
    
    def __set__(self, obj, value):
        if not isinstance(value, self.expected_type):
            raise TypeError(f"{self.name} must be {self.expected_type}")
        setattr(obj, f'_{self.name}', value)

class Person:
    name = TypeChecked(str)
    age = TypeChecked(int)
    
    def __init__(self, name, age):
        self.name = name
        self.age = age

p = Person("Alice", 25)
print(p.name)  # Alice

Practice

Implement a plugin system using metaclasses.

Advertisement

Need Expert Python Help?

Get personalized tutoring, project support, or professional consulting.

Advertisement