وحدة reprlib
في بايثون
تقدّم وحدة reprlib
وسيلة لإنتاج تمثيلات للكائنات مع إمكانية تحديد حجم السلسلة النصية الناتجة. تستخدم هذه الوحدة في منقّح بايثون وقد تكون مفيدة في سياقات أخرى أيضًا.
الواجهة البرمجية لوحدة reprlib
تقدّم هذه الوحدة صنفًا ونسخة صنف ودالة:
الصنف reprlib.Repr
يقدّم هذا الصنف خدمات تنسيق يمكن الاستفادة منها في إنشاء دوال مشابهة للدالة الداخلية repr()
. ولتجنّب إنشاء تمثيلات ذات أحجام كبيرة جدًّا، فإنّ أحجام أنواع البيانات المستخدمة في هذا الصنف تكون محدّدة.
نسخة الصنف reprlib.aRepr
نسخة من الصنف Repr
تستخدم لتقديم تابع repr()
الموصوف أدناه. يؤدي تغيير خصائص هذا الكائن إلى التأثر على حدود الأحجام المستخدمة بواسطة التابع repr()
ومنقّح بايثون.
التابع reprlib.repr(obj)
تابع repr()
الخاصّ بالكائن aRepr
. يعيد هذا التابع سلسلة نصية مشابهة لتلك التي تعيدها الدالة الداخلية التي تحمل الاسم ذاته، ولكن مع فرض قيود على أحجام معظم أنواع البيانات.
المزخرف @reprlib.recursive_repr(fillvalue="...")
وإضافة إلى ما سبق، تقدّم الوحدة مزخرفًا للكشف عن الاستدعاءات التعاودية للتابع __repr__()
ووضع سلسلة نصّية مكانها. في حال ظهور استدعاء تعاودي، يعيد التابع القيمة المحدّدة في المعامل fillvalue
، وفيما عدا ذلك يُستدعى التابع __repr__()
بصورة طبيعية.
ملاحظة: هذا المزخرف جديد في الإصدار 3.2 من اللغة.
مثال:
>>> from reprlib import recursive_repr
>>> class MyList(list):
... @recursive_repr()
... def __repr__(self):
... return '<' + '|'.join(map(repr, self)) + '>'
...
>>> m = MyList('abc')
>>> m.append(m)
>>> m.append('x')
>>> print(m)
<'a'|'b'|'c'|...|'x'>
كائنات Repr
تقدّم كائنات Repr
عددًا من الخصائص التي يمكن استخدامها لتعيين حدود لأحجام التمثيلات الخاصّة بأنواع مختلفة من الكائنات، إضافة إلى توابع تعمل على تنسيق أنواع معيّنة من الكائنات.
الخاصية Repr.maxlevel
الحدّ الأقصى للعمق الذي يمكن الوصول إليه في إنشاء تمثيلات تعاودية. القيمة الافتراضية هي 6.
الخاصية Repr.maxdict
الخاصية Repr.maxlist
الخاصية Repr.maxtuple
الخاصية Repr.maxset
الخاصية Repr.maxfrozenset
الخاصية Repr.maxdeque
الخاصية Repr.maxarray
الحدّ الأقصى للمدخلات الممثلة للكائن المسمّى في الخاصية. القيمة الافتراضية هي 4
للخاصية maxdict
، و 5
للخاصية maxarray
و 6
للخصائص الأخرى.
الخاصية Repr.maxlong
أقصى عدد من الحروف في تمثيل الأعداد الصحيحة. تحذف الأرقام من الوسط، والقيمة الافتراضية هي 40
.
الخاصية Repr.maxstring
أقصى عدد من الحروف في تمثيل السلسلة النصية. لاحظ أنّ التمثيل العادي للسلسلة النصية يُستخدم كمصدر للحروف. قد يؤدي تقليص حجم التمثيل إلى إفساد تسلسلات التهريب التي قد تكون مطلوبة في التمثيل. القيمة الافتراضية لهذه الخاصية هي 30
.
الخاصية Repr.maxother
تُستخدم هذه الخاصية للتحكم في حجم الكائنات التي لا تتوفّر في كائن Repr
توابع خاصّة لتنسيقها. وتطبّق هذه الخاصية بنفس طريقة تطبيق الخاصية maxstring
. القيمة الافتراضية هي 20
.
التابع Repr.repr(obj)
هذا التابع مكافئ للدالة الداخلية repr()
والتي تستخدم التنسيقات المفروضة بواسطة الكائن.
التابع Repr.repr1(obj, level)
هذا التابع بمثابة أداة التعاود التي يستخدمها التابع repr()
. يستخدم هذا التابع نوع الكائن المعطى لتحديد تابع التنسيق الذي يجب استدعاؤه، ثم تمرير الكائن ومستوى التعاود إليها. يجب أن تستدعي توابع التنسيق الخاصّة بنوع معيّن من الكائنات التابع repr1()
لتنفيذ عمليات التنسيق التعاودية، وتكون قيمة level
في الاستدعاء التعاودي مساوية للقيمة level - 1
.
التابع Repr.repr_TYPE(obj, level)
تنفّذ توابع التنسيق الخاصّة بأنواع معيّنة كتوابع تحمل اسمًا يعتمد على اسم النوع. يجري استبدال كلمة TYPE
في اسم التابع بواسطة التعبير '_'.join(type(obj).__name__.split())
. وتُرسل المعلومات إلى هذه التوابع عن طريق التابع repr1()
. أما توابع التنسيق الخاصّة بأنواع معيّنة والتي تحتاج إلى إجراء عمليات تنسيق تعاودية على قيمة معيّنة، فيجب أن تستدعي التابع self.repr1(subobj, level -1)
.
تفريع كائنات Repr
يتيح إرسال البيانات الديناميكي بواسطة التابع Repr.repr1()
تفريع كائنات Repr
لدعم المزيد من أنواع الكائنات الداخلية أو لتعديل طريقة التعامل مع الأنواع المدعومة فعلًا.
يبين المثال التالي كيفية إضافة دعم خاص لكائنات الملفات:
import reprlib
import sys
class MyRepr(reprlib.Repr):
def repr_TextIOWrapper(self, obj, level):
if obj.name in {'<stdin>', '<stdout>', '<stderr>'}:
return obj.name
return repr(obj)
aRepr = MyRepr()
print(aRepr.repr(sys.stdin)) # '<stdin>' تطبع
انظر أيضًا
- دالة repr(): تعيد الدّالة سلسلة نصيّة تحتوي على تمثيل قابل للطّباعة للكائن المُعطى.
مصادر
صفحة Alternate repr() implementation في توثيق بايثون الرسمي.