def decoratorFunc(originalFunc):
def wrapperFunc(*args, **kwargs):
print("wrapper executed this before {} ".format(originalFunc.__name__))
return originalFunc(*args, **kwargs)
return wrapperFunc
@decoratorFunc
def display():
print("This is a decorator .")
# display = decoratorFunc(display)
# print(display.__name__) ## the result is wrapperFunc
display() ## execute the wrapperFunc
@decoratorFunc
def display_info(name,age):
print(" display_info ran with arguments ({}, {}) ".format(name, age))
display_info('Jason', 25)
-----------------------------------------------------------------------------------------------------------------------------------------------------------
class DecoratorClass(object):
def __init__(self, originalFunc):
self.originalFunc = originalFunc
def __call__(self, *args, **kwargs):
print(" call method executed this before {} ".format( self.originalFunc.__name__ ))
return self.originalFunc(*args, **kwargs)
@DecoratorClass
def display():
print("This is a decorator .")
# display = decoratorFunc(display)
# print(display.__name__) ## the result is wrapperFunc
display() ## execute the wrapperFunc
@DecoratorClass
def display_info(name,age):
print(" display_info ran with arguments ({}, {}) ".format(name, age))
display_info('Jason', 25)