Decorator examples
Function-based decorator:
- It simply extends function behaviour.
import functools
def decorate_funct(f):
""" Decorator function: start_stop104 """
@functools.wraps(f)
def function_wrapper_level_one(*args, **kwargs):
# Do something ...
results = f(*args, **kwargs)
# Do something ...
return results
return function_wrapper_level_one
@decorate_funct
def funct():
return 100
X = funct()
print(X)
Class-based decorator:
- It is used typically to maintain state.
class CountCalls:
def __init__(self, func):
self.func = func
self.num_calls = 0
def __call__(self, *args, **kwargs):
self.num_calls += 1
print("Number of calls:", self.num_calls)
return self.func(*args, **kwargs)
@CountCalls
def say_hello():
print("hello")
say_hello()
Function-based decorator, but for class:
Przykład dekoratora dla klasy:
def add_method(cls):
def new_method(self):
return "Nowa metoda w klasie!"
# Dodajemy metodę do klasy
cls.new_method = new_method
return cls
@add_method
class MyClass:
def __init__(self, name):
self.name = name
def greet(self):
return f"Hello, {self.name}!"