تقنية

recursive_repr في بايثون: هل يحذف الرابط الذاتي؟

نص بديل عند العودة للكائن
العرض. [1] [2]

توقف العرض لا يعني زوال الدورة. [1] [2]

الخلاصة السريعة

لا؛ يستعمل نصًا بديلًا عند الاستدعاء المتكرر، ويبقى الرابط في مثالنا. [1] [2]

  • جعلنا n.link يشير إلى n. [1] [2]
  • زينا __repr__ بـrecursive_repr. [1] [2]
  • اخترنا fillvalue='<loop>'. [1] [2]
  • الناتج Node(<loop>)، ثم True للرابط. [1] [2]
  • اختبرنا 3.12.14 في خيط التنفيذ نفسه. [1] [2]

المثال

from reprlib import recursive_repr
class Node:
 @recursive_repr(fillvalue='<loop>')
 def __repr__(self):
  return 'Node('+repr(self.link)+')'
n=Node()
n.link=n
print(repr(n))
print(n.link is n)

[1] [2]

العرض والرابط

المصدر هنا يتتبع الكائن أثناء العرض. عند عودة الاستدعاء إليه يعيد النص البديل، ثم يزيل علامة التنفيذ عند الخروج. لا يكتب في link. يظهر Node(<loop>)؛ ويبقى n.link is n صحيحًا. [1] [2]

الرابط ما زال يعود للكائن نفسه
الرابط. [1] [2]

النطاق

نتحقق من كائننا ودالته فقط. لا نجعل هذا تسلسلًا يعيد بناء الكائن، ولا نفترض أن كل دالة __repr__ خالية من الآثار. لا نختبر خيوطًا متزامنة أو تغيير حد العودية. [1] [2]

المراجع

  1. Python 3.12: recursive_repr
  2. CPython 3.12.14: reprlib.py
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

للتوسع: بحث عن لغات البرمجة

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.