Open In App

Wrapper Class in Python

Last Updated : 21 Apr, 2020
Improve
Improve
Like Article
Like
Save
Share
Report

Decoration is a way to specify management code for functions and classes. Decorators themselves take the form of callable objects that process other callable objects. A Class Decorator is similar to function decorators, but they are run at the end of a class statement to rebind a class name to a callable (e.g functions). As such, they can be used to either manage classes just after they are created or insert a layer of wrapper logic to manage instances when they are later created. Class decorator can be used to manage class object directly, instead of instance calls – to increase/modify a class with new methods. Class decorators are strongly related to function decorators, in fact, they use nearly the same syntax and very similar coding pattern but somewhere logic differs.

Note: For more information, refer to Decorators in Python

Syntax:
Syntactically, class decorators appear just before class statements.

@decorator
class Class_Name:       
      ...

inst = Class_Name(50)

This piece of code is equivalent to

class Class_Name:
      ...

Class_Name = decorator(Class_Name)
inst = Class_Name(50);

Let’s understand the syntax, and how its works with an example:

Example:




# decorator accepts a class as 
# a parameter
def decorator(cls):
      
    class Wrapper:
          
        def __init__(self, x):
              
            self.wrap = cls(x)
              
        def get_name(self):
              
            # fetches the name attribute
            return self.wrap.name
          
    return Wrapper
  
@decorator
class C:
    def __init__(self, y):
        self.name = y
  
# its equivalent to saying
# C = decorator(C)
x = C("Geeks")
print(x.get_name())   


OUTPUT:

Geeks

In this example, the decorator rebinds the class C to another class Wrapper, which retains the original class in an enclosing scope and creates and embeds an instance (wrap) of the original class when it’s called. In more easy language, @decorator is equivalent to C = decorator(C) which is executed at the end of the definition of class C. In the decorator body, wrapper class modifies the class C maintaining the originality or without changing C. cls(x) return an object of class C (with its name attribute initialized with the value of x). The method get_name return the name attribute for the wrap object. And finally in the output “Geeks” gets printed.

So, this was an overview of the decorator or wrapper for the class. The class decorators are used to add additional functionality to the class without changing the original class to use as required in any situation.


Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads