الدالة functools.wraps()
في بايثون
تُستعمل الدّالة functools.wraps()
كمُزخرف لاستعمال الدّالة functools.update_wrapper()
عند تعريف دالّة مُحيطة.
الدّالة مُكافئة للدالة الجزئية النّاتجة عن الاستدعاء التالي (انظر الدّالة functools.partial()
):
partial(update_wrapper, wrapped=wrapped, assigned=assigned, updated=updated)
البنية العامة
@functools.wraps(wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)
المعاملات
wrapped
الدّالة المُحاطة.
assigned
الخاصيّات التي ستُعيّن.
updated
الخاصيّات التي ستُحدّث.
القيمة المعادة
تُحدّث دالّة مُحيطةً لتبدوَ مثل الدّالة المُحاطة.
أمثلة
المثال التّالي يوضّح كيفيّة عمل هذه الدّالة:
>>> from functools import wraps
>>> def my_decorator(f):
... @wraps(f)
... def wrapper(*args, **kwds):
... print('استدعاء الدالة الدّالة المُزخرَفة')
... return f(*args, **kwds)
... return wrapper
...
>>> @my_decorator
... def example():
... """Docstring"""
... print('مثال على دالّة مُزخرَفة')
...
>>> example()
استدعاء الدالة الدّالة المُزخرَفة
مثال على دالّة مُزخرَفة
>>> example.__name__ # اسم الدّالة
'example'
>>> example.__doc__ # سلسلة التوثيق النصية
'Docstring'
لو لم نستعمل الدّالة functools.wraps()
لكان اسم الدّالة هو 'wrapper'
عوضًا عن 'example'
ولفقدنا سلسلة التوثيق النصيّة.