إنشاء وتسلسل ديكورات الوظائف في بايثون

إنشاء وتسلسل ديكورات الوظائف في بايثون
إنشاء وتسلسل ديكورات الوظائف في بايثون

تعزيز وظائف بايثون مع الديكور

في بايثون، تعتبر أدوات الديكور أداة قوية لتعديل سلوك الوظائف أو الأساليب. إنها تسمح للمطورين بتغليف وظائف إضافية حول وظيفة موجودة بطريقة نظيفة وقابلة للقراءة. من خلال فهم كيفية إنشاء أدوات تزيين وتسلسلها، يمكنك تحسين نمطية وسهولة قراءة التعليمات البرمجية الخاصة بك بشكل كبير.

سترشدك هذه المقالة خلال عملية إنشاء اثنين من أدوات الديكور المحددة: أحدهما لجعل النص غامقًا والآخر لجعل النص مائلًا. سنوضح أيضًا كيفية ربط هذه الديكورات لتحقيق النتيجة المطلوبة. بحلول نهاية هذا البرنامج التعليمي، ستكون قادرًا على استدعاء دالة بسيطة وتلقي سلسلة منسقة تحتوي على علامات HTML العريضة والمائلة.

يأمر وصف
def يحدد وظيفة في بايثون.
f"<b>{func()}</b>" يستخدم تنسيق f-string لتغليف القيمة المرجعة للوظيفة بعلامات HTML العريضة.
return wrapper تُرجع وظيفة الغلاف الداخلي، مما يؤدي إلى إنشاء المُزخرف بشكل فعال.
@make_bold يطبق الديكور make_bold على دالة.
@add_html_tag("i") يطبق الديكور add_html_tag بالعلامة "i" على الوظيفة.
print(say()) يطبع نتيجة الدالة say، ويعرض المخرجات المزخرفة.
def add_html_tag(tag) يحدد وظيفة ذات ترتيب أعلى لإنشاء مصمم علامات HTML قابل للتخصيص.
@add_html_tag("b") يطبق الديكور add_html_tag بالعلامة "b" على الوظيفة.

فهم مصممي وظائف بايثون

توضح البرامج النصية المقدمة كيفية إنشاء وتسلسل أدوات تزيين الوظائف في بايثون لتعديل سلوك الوظائف. يتم تعريف الديكور في بايثون باستخدام def الكلمة الأساسية لإنشاء دالة تأخذ دالة أخرى كوسيطة وترجع دالة جديدة. ال make_bold يغلف الديكور نتيجة الوظيفة التي يزينها بعلامات HTML العريضة باستخدام تنسيق f-string: f"<b>{func()}</b>". وبالمثل، فإن make_italic يقوم الديكور بتغليف النتيجة بعلامات مائلة: f"<i>{func()}</i>". عندما يتم تطبيق هذه الديكورات على دالة باستخدام @decorator_name بناء الجملة، يقومون بتعديل مخرجات الوظيفة عن طريق إضافة علامات HTML المعنية.

يقدم البرنامج النصي الثاني نهجا أكثر تنوعا من خلال إنشاء وظيفة ذات ترتيب أعلى، add_html_tag، الذي يقوم بإنشاء أدوات تزيين لأي علامة HTML محددة. تأخذ هذه الوظيفة علامة HTML كوسيطة وتقوم بإرجاع مصمم يغلف مخرجات الوظيفة في العلامة المحددة: f"<{tag}>{func()}</{tag}>". باستخدام @add_html_tag("b") و @add_html_tag("i")، يمكننا ربط هذه الديكورات لتغليف مخرجات الملف say_hello وظيفة في كل من العلامات الغامقة والمائلة، مما يؤدي إلى المطلوب "مرحبًا". توضح هذه الأمثلة قوة ومرونة مصممي بايثون في تعزيز وتخصيص سلوك الوظيفة بطريقة نظيفة وقابلة لإعادة الاستخدام.

تنفيذ وتسلسل الديكور في بايثون

برنامج بايثون النصي لإنشاء وتسلسل الديكور

def make_bold(func):
    def wrapper():
        return f"<b>{func()}</b>"
    return wrapper

def make_italic(func):
    def wrapper():
        return f"<i>{func()}</i>"
    return wrapper

@make_bold
@make_italic
def say():
    return "Hello"

print(say())

إنشاء علامات HTML باستخدام Python Decorators

برنامج Python النصي لتعديل الوظائف ووضع علامات HTML

def add_html_tag(tag):
    def decorator(func):
        def wrapper():
            return f"<{tag}>{func()}</{tag}>"
        return wrapper
    return decorator

@add_html_tag("b")
@add_html_tag("i")
def say_hello():
    return "Hello"

print(say_hello())

تقنيات بايثون للديكور المتقدمة

إلى جانب التعديل البسيط للوظيفة، توفر أدوات تزيين Python طريقة قوية لتعزيز إمكانية إعادة استخدام التعليمات البرمجية وقابلية صيانتها. إحدى حالات الاستخدام المتقدمة هي أدوات الديكور ذات المعلمات، والتي تسمح لمصممي الديكور بقبول الوسائط. تم توضيح هذه التقنية باستخدام add_html_tag مصمم الديكور في الأمثلة السابقة. من خلال تحديد مصمم ديكور يقوم بإنشاء ديكورات أخرى، يمكننا إنشاء هياكل تعليمات برمجية مرنة للغاية وقابلة لإعادة الاستخدام. تمكننا أدوات الديكور ذات المعلمات من تمرير المعلمات إلى مصمم الديكور نفسه، مما يسمح بإجراء تعديلات ديناميكية ومحددة السياق على سلوك الوظيفة.

جانب آخر مهم من مصممي الديكور هو قدرتهم على الحفاظ على البيانات الوصفية للوظيفة. عندما يتم تغليف دالة بواسطة أحد مصممي الديكور، فمن الممكن أن يتم فقدان البيانات الوصفية الخاصة بها، مثل اسمها وسلسلة المستندات الخاصة بها. للحفاظ على هذه البيانات الوصفية، يجب استخدام Python functools.wraps يستخدم داخل الديكور. عن طريق التقديم @functools.wraps إلى وظيفة التغليف، يتم نسخ البيانات التعريفية للوظيفة الأصلية، مما يضمن استمرار الأدوات التي تعتمد على هذه البيانات التعريفية، مثل مولدات الوثائق، في العمل بشكل صحيح. بالإضافة إلى ذلك، يمكن تكديس أدوات الديكور، كما هو موضح مع @make_bold و @make_italic أمثلة، لتطبيق طبقات متعددة من تعديل السلوك بطريقة نظيفة وقابلة للقراءة.

أسئلة شائعة حول مصممي بايثون

  1. ما هو الديكور في بايثون؟
  2. المزخرف هو وظيفة تقوم بتعديل سلوك وظيفة أخرى، وعادة ما تستخدم لإضافة وظيفة بطريقة قابلة لإعادة الاستخدام.
  3. كيف يمكنك تطبيق الديكور على وظيفة؟
  4. يمكنك تطبيق الديكور باستخدام @decorator_name بناء الجملة مباشرة فوق تعريف الوظيفة.
  5. هل يمكنك تطبيق العديد من الديكورات على وظيفة واحدة؟
  6. نعم، يمكن تكديس العديد من المزخرفات فوق دالة، ويتم تطبيق كل منها بالترتيب الذي تم إدراجه به.
  7. ما هو الديكور المعلمات؟
  8. المزخرف ذو المعلمات هو مزخرف يأخذ الوسائط، مما يسمح بتعديلات أكثر ديناميكية ومرونة.
  9. كيف يمكنك الحفاظ على البيانات التعريفية للوظيفة عند استخدام أدوات الديكور؟
  10. انت تستخدم @functools.wraps داخل الديكور لنسخ البيانات التعريفية للوظيفة الأصلية إلى وظيفة المجمع.
  11. لماذا الديكور مفيد؟
  12. تعد أدوات الديكور مفيدة لإعادة استخدام التعليمات البرمجية وسهولة القراءة وفصل الاهتمامات عن طريق تغليف الوظائف.
  13. ما هو الغرض من return wrapper بيان في الديكور؟
  14. ال return wrapper تقوم العبارة بإرجاع الوظيفة الداخلية، وتطبيق تعديلات مصمم الديكور بشكل فعال.
  15. هل يمكن استخدام أدوات الديكور في الأساليب الصفية؟
  16. نعم، يمكن استخدام أدوات الديكور في كل من توابع الصنف والمثيل لتعديل سلوكها.
  17. كيف تقوم بسلسلة الديكور في بايثون؟
  18. لسلسلة الديكور، قم بتكديس عدة @decorator_name البيانات فوق تعريف الوظيفة.
  19. ما هو استخدام الخيوط f في الديكور؟
  20. تُستخدم سلاسل F لتنسيق السلاسل في أدوات الديكور، مما يسمح بالإدراج الديناميكي لمخرجات الوظائف في تنسيقات محددة، مثل علامات HTML.

تلخيص ديكورات الوظائف في بايثون

توفر أدوات تزيين الوظائف في Python طريقة قوية لتعديل سلوك الوظيفة وتحسينه. من خلال فهم كيفية إنشاء الديكورات وتطبيقها وتسلسلها، يمكنك تحسين نمطية الكود وسهولة قراءته بشكل كبير. يغطي هذا الدليل المفاهيم الأساسية مثل الديكورات البسيطة والمحددة، والحفاظ على البيانات الوصفية للوظيفة functools.wrapsوالتطبيقات العملية لمصممي الديكور لإضافة علامات HTML إلى مخرجات الوظيفة. يتيح إتقان هذه التقنيات تعليمات برمجية أكثر ديناميكية وقابلة للصيانة، مما يسهل ممارسات البرمجة الأنظف والأكثر كفاءة.