الفرق بين المراجعتين لصفحة: «Python/reprlib»
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:وحدة <code>reprlib</code> في بايثون}}</noinclude> تقدّم وحدة reprlib وسيلة لإنتاج تمثيلات للكائ...' |
لا ملخص تعديل |
||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE:وحدة <code>reprlib</code> في بايثون}}</noinclude> | <noinclude>{{DISPLAYTITLE:وحدة <code>reprlib</code> في بايثون}}</noinclude> | ||
تقدّم وحدة reprlib وسيلة لإنتاج تمثيلات للكائنات مع إمكانية تحديد حجم السلسلة النصية الناتجة. تستخدم هذه الوحدة في منقّح بايثون وقد تكون مفيدة في سياقات أخرى أيضًا. | تقدّم وحدة <code>reprlib</code> وسيلة لإنتاج تمثيلات للكائنات مع إمكانية تحديد حجم السلسلة النصية الناتجة. تستخدم هذه الوحدة في منقّح بايثون وقد تكون مفيدة في سياقات أخرى أيضًا. | ||
== الواجهة البرمجية لوحدة <code>reprlib</code> == | |||
تقدّم هذه الوحدة صنفًا ونسخة صنف ودالة: | تقدّم هذه الوحدة صنفًا ونسخة صنف ودالة: | ||
=== | === الصنف <code>reprlib.Repr</code> === | ||
يقدّم هذا الصنف خدمات تنسيق يمكن الاستفادة منها في إنشاء دوال مشابهة للدالة الداخلية repr. ولتجنّب إنشاء تمثيلات ذات أحجام كبيرة جدًّا، فإنّ أحجام أنواع البيانات المستخدمة في هذا الصنف تكون محدّدة. | يقدّم هذا الصنف خدمات تنسيق يمكن الاستفادة منها في إنشاء دوال مشابهة للدالة الداخلية <code>[[Python/repr|repr()]]</code>. ولتجنّب إنشاء تمثيلات ذات أحجام كبيرة جدًّا، فإنّ أحجام أنواع البيانات المستخدمة في هذا الصنف تكون محدّدة. | ||
=== نسخة الصنف <code>reprlib.aRepr</code> === | |||
نسخة من الصنف <code>Repr</code> تستخدم لتقديم تابع <code>repr()</code> الموصوف أدناه. يؤدي تغيير خصائص هذا الكائن إلى التأثر على حدود الأحجام المستخدمة بواسطة التابع <code>repr()</code> ومنقّح بايثون. | |||
=== التابع <code>reprlib.repr(obj)</code> === | |||
تابع <code>repr()</code> الخاصّ بالكائن <code>aRepr</code>. يعيد هذا التابع سلسلة نصية مشابهة لتلك التي تعيدها الدالة الداخلية التي تحمل الاسم ذاته، ولكن مع فرض قيود على أحجام معظم أنواع البيانات. | |||
=== reprlib. | === المزخرف <code>@reprlib.recursive_repr(fillvalue="...")</code> === | ||
وإضافة إلى ما سبق، تقدّم الوحدة مزخرفًا للكشف عن الاستدعاءات التعاودية للتابع <code>__repr__()</code> ووضع [[Python/str|سلسلة نصّية]] مكانها. في حال ظهور استدعاء تعاودي، يعيد التابع القيمة المحدّدة في المعامل <code>fillvalue</code>، وفيما عدا ذلك يُستدعى التابع <code>__repr__()</code> بصورة طبيعية. | |||
وإضافة إلى ما سبق، تقدّم الوحدة مزخرفًا للكشف عن الاستدعاءات التعاودية للتابع | |||
'''ملاحظة''': هذا المزخرف جديد في الإصدار 3.2 من اللغة. | '''ملاحظة''': هذا المزخرف جديد في الإصدار 3.2 من اللغة. | ||
سطر 41: | سطر 37: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== كائنات Repr == | == كائنات <code>Repr</code> == | ||
تقدّم كائنات Repr عددًا من الخصائص التي يمكن استخدامها لتعيين حدود لأحجام التمثيلات الخاصّة بأنواع مختلفة من الكائنات، إضافة إلى توابع تعمل على تنسيق أنواع معيّنة من الكائنات. | تقدّم كائنات <code>Repr</code> عددًا من الخصائص التي يمكن استخدامها لتعيين حدود لأحجام التمثيلات الخاصّة بأنواع مختلفة من الكائنات، إضافة إلى توابع تعمل على تنسيق أنواع معيّنة من الكائنات. | ||
=== Repr.maxlevel === | === الخاصية <code>Repr.maxlevel</code> === | ||
الحدّ الأقصى للعمق الذي يمكن الوصول إليه في إنشاء تمثيلات تعاودية. القيمة الافتراضية هي 6. | الحدّ الأقصى للعمق الذي يمكن الوصول إليه في إنشاء تمثيلات تعاودية. القيمة الافتراضية هي 6. | ||
=== Repr.maxdict === | === الخاصية <code>Repr.maxdict</code> === | ||
=== Repr.maxlist === | === الخاصية <code>Repr.maxlist</code> === | ||
===Repr.maxtuple === | ===الخاصية <code>Repr.maxtuple</code> === | ||
===Repr.maxset=== | ===الخاصية <code>Repr.maxset</code>=== | ||
===Repr.maxfrozenset=== | ===الخاصية <code>Repr.maxfrozenset</code>=== | ||
===Repr.maxdeque=== | ===الخاصية <code>Repr.maxdeque</code>=== | ||
===Repr.maxarray === | ===الخاصية <code>Repr.maxarray</code> === | ||
الحدّ الأقصى للمدخلات الممثلة في | الحدّ الأقصى للمدخلات الممثلة للكائن المسمّى في الخاصية. القيمة الافتراضية هي <code>4</code> للخاصية <code>maxdict</code>، و <code>5</code> للخاصية <code>maxarray</code> و <code>6</code> للخصائص الأخرى. | ||
===Repr.maxlong=== | ===الخاصية <code>Repr.maxlong</code>=== | ||
أقصى عدد من الحروف في تمثيل الأعداد الصحيحة. تحذف الأرقام من الوسط، والقيمة الافتراضية هي 40. | أقصى عدد من الحروف في تمثيل [[Python/int|الأعداد الصحيحة]]. تحذف الأرقام من الوسط، والقيمة الافتراضية هي <code>40</code>. | ||
===Repr.maxstring=== | ===الخاصية <code>Repr.maxstring</code>=== | ||
أقصى عدد من الحروف في تمثيل السلسلة النصية. لاحظ أنّ التمثيل العادي للسلسلة النصية يُستخدم كمصدر للحروف. قد يؤدي تقليص حجم التمثيل إلى إفساد تسلسلات التهريب التي قد تكون مطلوبة في التمثيل. القيمة الافتراضية لهذه الخاصية هي 30. | أقصى عدد من الحروف في تمثيل [[Python/str|السلسلة النصية]]. لاحظ أنّ التمثيل العادي [[Python/str|للسلسلة النصية]] يُستخدم كمصدر للحروف. قد يؤدي تقليص حجم التمثيل إلى إفساد تسلسلات التهريب التي قد تكون مطلوبة في التمثيل. القيمة الافتراضية لهذه الخاصية هي <code>30</code>. | ||
===Repr.maxother=== | ===الخاصية <code>Repr.maxother</code>=== | ||
تُستخدم هذه الخاصية للتحكم في حجم الكائنات التي لا تتوفّر في كائن Repr توابع خاصّة لتنسيقها. وتطبّق هذه الخاصية بنفس طريقة تطبيق الخاصية maxstring. القيمة الافتراضية هي 20. | تُستخدم هذه الخاصية للتحكم في حجم الكائنات التي لا تتوفّر في كائن <code>Repr</code> توابع خاصّة لتنسيقها. وتطبّق هذه الخاصية بنفس طريقة تطبيق الخاصية <code>maxstring</code>. القيمة الافتراضية هي <code>20</code>. | ||
===Repr.repr(obj)=== | ===التابع <code>Repr.repr(obj)</code>=== | ||
هذا التابع مكافئ للدالة الداخلية repr() والتي تستخدم التنسيقات المفروضة بواسطة الكائن. | هذا التابع مكافئ للدالة الداخلية <code>repr()</code> والتي تستخدم التنسيقات المفروضة بواسطة الكائن. | ||
===Repr.repr1(obj, level)=== | ===التابع <code>Repr.repr1(obj, level)</code>=== | ||
هذا التابع بمثابة أداة التعاود التي يستخدمها التابع repr(). يستخدم هذا التابع نوع الكائن المعطى لتحديد تابع التنسيق الذي يجب استدعاؤه، ثم تمرير الكائن ومستوى التعاود إليها. يجب أن تستدعي توابع التنسيق الخاصّة بنوع معيّن من الكائنات التابع repr1() لتنفيذ عمليات التنسيق التعاودية، وتكون قيمة level في الاستدعاء التعاودي مساوية للقيمة level - 1. | هذا التابع بمثابة أداة التعاود التي يستخدمها التابع <code>repr()</code>. يستخدم هذا التابع نوع الكائن المعطى لتحديد تابع التنسيق الذي يجب استدعاؤه، ثم تمرير الكائن ومستوى التعاود إليها. يجب أن تستدعي توابع التنسيق الخاصّة بنوع معيّن من الكائنات التابع <code>repr1()</code> لتنفيذ عمليات التنسيق التعاودية، وتكون قيمة <code>level</code> في الاستدعاء التعاودي مساوية للقيمة <code>level - 1</code>. | ||
===Repr.repr_TYPE(obj, level)=== | ===التابع <code>Repr.repr_TYPE(obj, level)</code>=== | ||
تنفّذ توابع التنسيق الخاصّة بأنواع معيّنة كتوابع تحمل اسمًا يعتمد على اسم النوع. يجري استبدال كلمة TYPE في اسم التابع بواسطة التعبير '_'.join(type(obj).__name__.split()). وتُرسل المعلومات إلى هذه التوابع عن طريق التابع repr1(). أما توابع التنسيق الخاصّة بأنواع معيّنة والتي تحتاج إلى إجراء عمليات تنسيق تعاودية على قيمة معيّنة، فيجب أن تستدعي التابع self.repr1(subobj, level -1). | تنفّذ توابع التنسيق الخاصّة بأنواع معيّنة كتوابع تحمل اسمًا يعتمد على اسم النوع. يجري استبدال كلمة <code>TYPE</code> في اسم التابع بواسطة التعبير <code>'_'.join(type(obj).__name__.split())</code>. وتُرسل المعلومات إلى هذه التوابع عن طريق التابع <code>repr1()</code>. أما توابع التنسيق الخاصّة بأنواع معيّنة والتي تحتاج إلى إجراء عمليات تنسيق تعاودية على قيمة معيّنة، فيجب أن تستدعي التابع <code>self.repr1(subobj, level -1)</code>. | ||
== تفريع كائنات Repr == | == تفريع كائنات Repr == | ||
يتيح إرسال البيانات الديناميكي بواسطة التابع Repr.repr1() تفريع كائنات Repr لدعم المزيد من أنواع الكائنات الداخلية أو لتعديل طريقة التعامل مع الأنواع المدعومة فعلًا. | يتيح إرسال البيانات الديناميكي بواسطة التابع <code>Repr.repr1()</code> تفريع كائنات <code>Repr</code> لدعم المزيد من أنواع الكائنات الداخلية أو لتعديل طريقة التعامل مع الأنواع المدعومة فعلًا. | ||
يبين المثال التالي كيفية إضافة دعم خاص لكائنات الملفات: | يبين المثال التالي كيفية إضافة دعم خاص لكائنات الملفات: | ||
سطر 95: | سطر 92: | ||
== انظر أيضًا == | == انظر أيضًا == | ||
* دالة repr() | * [[Python/repr|دالة repr()]]: تعيد الدّالة سلسلة نصيّة تحتوي على تمثيل قابل للطّباعة للكائن المُعطى. | ||
== مصادر == | == مصادر == |
المراجعة الحالية بتاريخ 19:18، 25 أغسطس 2018
تقدّم وحدة 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 في توثيق بايثون الرسمي.