Naranjito
2021. 11. 15. 17:49
- @
def decorator(func):
return func
@decorator
def some_func():
pass
Is equivalent to this code :
def decorator(func):
return func
def some_func():
return pass
some_func=decorator(some_func)
Example :
class Pizza(object):
def __init__(self):
self.toppings=[]
def __call__(self, topping):
self.toppings.append(topping())
def __repr__(self):
return str(self.toppings)
pizza=Pizza()
@pizza
def cheese():
return 'cheese'
@pizza
def sauce():
return 'sauce'
print(pizza)
>>>
['cheese', 'sauce']
class DatetimeDecorator:
def __init__(self, f):
self.func=f
def __call__(self, *args, **kwargs):
print(datetime.datetime.now())
self.func(*args, **kwargs)
print(datetime.datetime.now())
class MainClass:
@DatetimeDecorator
def main_function_1():
print('main function 1 starts')
@DatetimeDecorator
def main_function_2():
print('main function 2 starts')
my=MainClass()
my.main_function_1()
my.main_function_2()
>>>
2021-12-21 06:17:35.554216
main function 1 starts
2021-12-21 06:17:35.555863
2021-12-21 06:17:35.556337
main function 2 starts
2021-12-21 06:17:35.556954