إتقان Monkeypatching في بايثون: دليل لتخصيص عبارات الطباعة
يمكن أن تشعر عملية التصحيح غالبًا وكأنها لغز معقد، خاصة عندما تحاول تتبع المخرجات وفهم تدفق برنامجك. إحدى المشكلات الشائعة التي يواجهها مطورو بايثون هي الرغبة في تحسين المعلومات التي تظهر في إخراج stderr الخاص بهم. سيشرح هذا المنشور كيفية استخدام monkeypatching
في بايثون لإضافة معلومات تصحيح مفيدة إلى عبارات الطباعة على مستوى عالمي.
فهم المشكلة: تحسين مخرجات التصحيح
قد ترغب في عرض رسائل أكثر إبلاغًا إلى stderr. على سبيل المثال، إذا كنت تقوم بتصحيح دالة وتريد عرض موقع الاتصال (اسم الملف ورقم السطر)، فإن وجود عبارات طباعة مخصصة يمكن أن يحسن بشكل كبير من قابلية التتبع.
ربما وجدت نفسك تتصارع مع الاستكشاف الذاتي في بايثون لاسترجاع اسم الدالة ورقم السطر، مثل هذا:
name = sys._getframe(1).f_code
name = "%s:%d %s()" % (os.path.split(name.co_filename)[1], name.co_firstlineno, name.co_name)
أي أنه ينتج سلسة نصية جميلة مثل:
foo.py:22 bar() blah blah
السؤال الرئيسي
هل من الممكن تغيير سلوك عبارات الطباعة على مستوى العالم في بايثون لتضمين هذا النوع من السياق؟
الحل: استخدام Monkeypatching
نعم، يمكنك تحقيق ذلك باستخدام تقنية تُعرف باسم monkeypatching. في بايثون، يشير monkeypatching
إلى تعديل أو توسيع سلوك المكتبات أو الفئات أثناء وقت التشغيل. في حالتنا، سنقوم بتجاوز sys.stdout
لتخصيص كيفية عمل عبارات الطباعة.
دليل خطوة بخطوة لتطبيق Monkeypatching على عبارات الطباعة
إليك طريقة بسيطة وفعالة لإضافة معلوماتك المخصصة إلى كل عبارة طباعة:
-
استيراد الوحدات المطلوبة
ابدأ باستيراد الوحدات اللازمة:import sys import os
-
إنشاء فئة طباعة مخصصة
أنشئ فئة جديدة ستتعامل مع سلوك الطباعة المخصص لديك:class CustomPrint: def write(self, message): # احصل على الإطار الحالي لاسترجاع موقع الاستدعاء frame = sys._getframe(1) code = frame.f_code location = "%s:%d %s() " % (os.path.split(code.co_filename)[1], frame.f_lineno, code.co_name) # أضف معلومات الموقع إلى الرسالة sys.stdout.write(location + message) def flush(self): pass # هذا ضروري للتوافق مع تدفقات الطباعة القابلة للمسح
-
تجاوز sys.stdout
استبدلsys.stdout
بواجهةCustomPrint
الجديدة الخاصة بك:sys.stdout = CustomPrint()
مثال على الاستخدام
الآن، في كل مرة تستخدم فيها دالة الطباعة، ستقوم تلقائيًا بإضافة معلومات التصحيح إلى المخرج. على سبيل المثال:
print("هذه رسالة اختبار.")
ستنتهي بالناتج كما يلي:
foo.py:22 <module> هذه رسالة اختبار.
بهذه الطريقة، تتضمن كل عبارة طباعة الآن اسم الملف ورقم السطر بجانب رسالتك، مما يمكن أن يكون مفيدًا للغاية أثناء عملية التصحيح.
الخاتمة
يمكن أن يكون استخدام monkeypatching لتخصيص عبارات الطباعة تحولًا كبيرًا من حيث كيفية جمع معلومات التصحيح. من خلال تغيير سلوك الطباعة على مستوى عالمي، يمكنك إثراء سياق المخرجات الخاصة بك، مما يجعل جلسات التصحيح الخاصة بك أكثر إنتاجية.
لا تتردد في استكشاف هذه التقنية في مشاريعك الخاصة وتعزيز قدراتك على التصحيح في بايثون!