Attaching a Decorator to All Functions within a Class in Python

Last Updated : 23 Jul, 2025

Decorators in Python allow us to add extra features to functions or methods of class without changing their code. Sometimes, we might want to apply a decorator to all methods in a class to ensure they all behave in a certain way. This article will explain how to do this step by step.

Applying Decorators to Class Methods

To apply a decorator to all methods within a class we can use the __init_subclass__ method which is a class method that gets called whenever a class is subclassed. This method can be used to wrap all methods in a class with a given decorator.

Example: The below example automatically applies a decorator to all methods of a class and adds print statements before and after each method call to log when the method starts and finishes.

Python
def my_decorator(func):
    def wrapper(*args, **kwargs):
        print(f"Calling {func.__name__}")
        result = func(*args, **kwargs)
        print(f"Finished {func.__name__}")
        return result
    return wrapper

class DecorateAllMethods:
    def __init_subclass__(cls, **kwargs):
        super().__init_subclass__(**kwargs)
        for attr, value in cls.__dict__.items():
            if callable(value):
                setattr(cls, attr, my_decorator(value))

class MyClass(DecorateAllMethods):
    def method1(self):
        print("Executing method1")
    
    def method2(self):
        print("Executing method2")

obj = MyClass()
obj.method1()
obj.method2()

Output
Calling method1
Executing method1
Finished method1
Calling method2
Executing method2
Finished method2

Conclusion

Applying decorators to all methods in a class can help us to add consistent behavior like logging or validation to all our methods easily. Using the __init_subclass__ method we can do this without modifying each method individually.

Q. Can I use more than one decorator on class methods?

Yes, you can apply multiple decorators by wrapping each method with multiple decorators in the __init_subclass__ method.

Q. How can I exclude some methods from being decorated?

You can add checks in the __init_subclass__ method to skip decorating certain methods based on their names or other criteria.

Q. Will decorators affect my code's speed?

Decorators can slow down your code a bit because they add extra function calls. Make sure to test your code to ensure it still runs quickly enough.

Comment

Explore