Function and class decorators
# Simple decorator
def html_tag_h1(func):
def wrapper(*args, **kwargs):
return_val = func(*args, **kwargs)
return f'<h1>{return_val}</h1>'
return wrapper
@html_tag_h1
def hello(text):
return f'Hi {text}'
# Decorator with arguments
def html_tag(html_tag):
def decorator(func):
def wrapper(*args, **kwargs):
return_val = func(*args, **kwargs)
return f'<{html_tag}>{return_val}</{html_tag}>'
return wrapper
return decorator
@html_tag('h5')
def hello_with_tag(text):
return f'Hi {text}'
# Simple class decorator
class Count:
def __init__(self, func):
self.func = func
def __call__(self, *args, **kwargs):
return f'<h1>{self.func(*args, **kwargs)}</h1>'
@Count
def html_class_tag_h1(text):
return f'Hi {text}'
# Class decorator with arguments
class Count:
def __init__(self, tag):
self.tag = tag
def __call__(self, func):
def wrapper(*args, **kwargs):
return f'<{self.tag}>{func(*args, **kwargs)}</{self.tag}>'
return wrapper
@Count('h5')
def html_class_with_tag(text):
return f'Hi {text}'