המון פעמים בקורסים כשאני מגיע ללמד Decorators לא כולם מבינים למה צריך את זה. אז הנה ההזדמנות שלכם לעזור - יש לכם דוגמאות טובות לשימוש ב Decorators מהעולם האמיתי? שתפו בתגובות
אחת הדוגמאות הטובות בעיניי היא בדיקת טיפוסים. שימו לב ל Decorator הבא:
# make sure function can only be called with a float and an int
@accepts(float, int)
def pow(base, exp):
pass
# raises exception: wrong type
pow('x', 10)
והקוד? אפילו לא 15 שורות:
from collections import deque
def accepts(*types):
def decorator(f):
def wrapped(*args, **kwargs):
types_q = deque(types)
for arg in args:
expected_type = types_q.popleft()
if type(arg) != expected_type:
raise Exception("Invalid Type. Expected: {}, Got: {}".format(expected_type, type(arg)))
f(*args, **kwargs)
return wrapped
return decorator