יש לכם דוגמאות טובות ל Decorators ?

המון פעמים בקורסים כשאני מגיע ללמד 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