OOP Mastery

Python OOPFree Lesson

Advertisement

OOP Mastery

Metaclasses, descriptors, and advanced OOP techniques.

Overview

Master advanced OOP.

Metaclass Registry

class PluginRegistry(type):
    _plugins = {}
    
    def __new__(cls, name, bases, attrs):
        new_class = super().__new__(cls, name, bases, attrs)
        if name != 'Plugin':
            cls._plugins[name] = new_class
        return new_class
    
    @classmethod
    def get_plugins(cls):
        return cls._plugins.copy()

class Plugin(metaclass=PluginRegistry):
    pass

class AuthPlugin(Plugin):
    def authenticate(self):
        return "Authenticated"

class DataPlugin(Plugin):
    def process(self):
        return "Data processed"

print(PluginRegistry.get_plugins())

Descriptor Pattern

class CachedProperty:
    def __init__(self, func):
        self.func = func
    
    def __set_name__(self, owner, name):
        self.name = name
    
    def __get__(self, obj, objtype=None):
        if obj is None:
            return self
        value = self.func(obj)
        setattr(obj, self.name, value)
        return value

class DataAnalyzer:
    def __init__(self, data):
        self.data = data
    
    @CachedProperty
    def mean(self):
        print("Computing mean...")
        return sum(self.data) / len(self.data)

analyzer = DataAnalyzer([1, 2, 3, 4, 5])
print(analyzer.mean)  # Computes
print(analyzer.mean)  # Uses cache

Practice

Build a plugin system using metaclasses.

Advertisement

Need Expert Python Help?

Get personalized tutoring, project support, or professional consulting.

Advertisement