Introduction#
Python decorators are a strong characteristic that means that you can modify the conduct of capabilities or lessons dynamically. Decorators present a means so as to add performance to present code with out modifying the unique supply. This weblog put up will delve into the idea of decorators in Python, ranging from the fundamentals and steadily progressing to extra superior methods.
Understanding Decorators#
Operate Decorators#
Operate decorators are a strategy to modify the conduct of a operate by wrapping it inside one other operate. The decorator operate takes the unique operate as an argument, provides some performance, and returns a modified operate. This lets you improve or lengthen the conduct of capabilities with out modifying their supply code.
def uppercase_decorator(func):
def wrapper():
end result = func()
return end result.higher()
return wrapper
@uppercase_decorator
def say_hello():
return "Hi there, World!"
print(say_hello()) # Output: HELLO, WORLD!
Within the instance above, the uppercase_decorator
operate is outlined to wrap the say_hello
operate. It modifies the conduct by changing the returned string to uppercase. The @uppercase_decorator
syntax is used to use the decorator to the say_hello
operate.
Class Decorators#
Class decorators are much like operate decorators however function on lessons as a substitute of capabilities. They permit you to modify the conduct or add performance to a category. The decorator operate takes the unique class as an argument, creates a derived class with added performance, and returns the modified class.
def add_method_decorator(cls):
def new_method(self):
return "New technique added!"
cls.new_method = new_method
return cls
@add_method_decorator
class MyClass:
def existing_method(self):
return "Current technique referred to as!"
obj = MyClass()
print(obj.existing_method()) # Output: Current technique referred to as!
print(obj.new_method()) # Output: New technique added!
Within the instance above, the add_method_decorator
operate wraps the MyClass
class and provides a brand new technique referred to as new_method
. The @add_method_decorator
syntax is used to use the decorator to the MyClass
class.
Decorator Syntax and Execution#
When utilizing decorators, it’s vital to know the order of execution. Decorators are utilized from the underside up, which means the decorator outlined on the prime is executed final. This order is essential when a number of decorators are utilized to the identical operate or class.
def decorator1(func):
print("Decorator 1 executed")
return func
def decorator2(func):
print("Decorator 2 executed")
return func
@decorator1
@decorator2
def my_function():
print("Inside my_function")
my_function()
Output:
Decorator 2 executed
Decorator 1 executed
Inside my_function
Within the instance above, the decorator2
decorator is executed first, adopted by the decorator1
decorator. The my_function
is then referred to as, and the output displays the order of execution.