الدالة functools.wraps()‎ في بايثون

من موسوعة حسوب
مراجعة 20:14، 1 يوليو 2018 بواسطة عبد-الهادي-الديوري (نقاش | مساهمات) (إضافة الصّفحة)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

تُستعمل الدّالة 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'‎‎ ولفقدنا سلسلة التوثيق النصيّة.

انظر أيضًا

مصادر