Python Wrapper Classes: Understanding and Using Decorators

Explore how to use wrapper classes and decorators in Python to modify class behavior without altering the original class definition. Learn how to wrap a class with a decorator to manage and enhance its functionality post-instantiation. Discover practical examples to apply this technique in your Python projects.



Python - Wrapper Classes

Introduction

A function in Python is a first-order object. A function can take another function as its argument and wrap another function definition inside it. This helps modify a function without actually changing it. Such functions are called decorators.

This feature is also available for wrapping a class. This technique is used to manage the class after it is instantiated by wrapping its logic inside a decorator.

Example

In this example, we demonstrate how to wrap a class using a decorator function.

Example

def decorator_function(Wrapped):
    class Wrapper:
        def __init__(self, x):
            self.wrap = Wrapped(x)
        def print_name(self):
            return self.wrap.name
    return Wrapper

@decorator_function
class Wrapped:
    def __init__(self, x):
        self.name = x

obj = Wrapped('tutorialsarena')
print(obj.print_name())
        
Output

tutorialsarena
        

Explanation

In the above example:

  • Wrapped is the name of the class to be wrapped. It is passed as an argument to the decorator function.
  • Inside the decorator function, a Wrapper class is defined, which modifies the behavior of the passed class with its attributes and returns the modified class.
  • The returned class is instantiated, and its method can now be called.

When you execute the code, the output will be:

Output

tutorialsarena