Open In App

Conditional Decorators in Python

Last Updated : 10 Jul, 2020
Improve
Improve
Like Article
Like
Save
Share
Report

In Python, decorators are functions or classes that wrap around a function as a wrapper by taking a function as input and returning out a callable. They allow the creation of reusable building code blocks that can either change or extend behavior of other functions.

Conditional Decorators

Given a condition, the idea here is to execute code or basically wrap a function using a decorator if a certain condition is met or true. There are two ways by which we can use a decorator conditionally.

Method 1: When the decorator decides how to wrap a function

  • In this case the function is passed to a decorator normally
  • Then based on the condition the decorator decides what to do with the code

The following program passes a function normally to the decorator then if the given condition is true the program returns the string in uppercase and if it is false it returns it in lower case.




condition = True
  
def conditional_decorator(func):
      
    def wrapper():
        oldstring = func()
          
        if condition:
            newstring = oldstring.upper()
        else:
            newstring = oldstring.lower()
          
        return newstring
      
    return wrapper
  
@conditional_decorator
def func():
    return 'geeKSfoRGEEks'
  
print(func())


Output:

'GEEKSFORGEEKS'

Method 2: In this, decorators are called only if a certain condition is met.

In the following program, the program takes user input to decide on the condition. If the user enters 1, the decorator is called and the string is returned in uppercase. If the user enters 2, again a decorator is called and the given string is returned in lowercase. Apart from this if any other number is entered the function is returned as it is without any modification.




def decorator1(func):
      
    def wrapper():
        oldstring = func()
        newstring = oldstring.upper()
        return newstring
      
    return wrapper
  
def decorator2(func):
      
    def wrapper():
        oldstring = func()
        newstring = oldstring.lower()
        return newstring
      
    return wrapper
  
cond = 1
  
if cond == 1:
    @decorator1
    def func():
        return 'GeeksFORGeeKs'
elif cond == 2:
    @decorator2
    def func():
        return 'GeeksFORGeeKs'
else:
    def func():
        return 'GeeksFORGeeKs'
      
print(func())


Output:

GEEKSFORGEEKS


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

Similar Reads