الفرق بين المراجعتين لصفحة: «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> ==
تقدّم هذه الوحدة صنفًا ونسخة صنف ودالة:
تقدّم هذه الوحدة صنفًا ونسخة صنف ودالة:


=== class reprlib.Repr ===
=== الصنف <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> ===


=== reprlib.aRepr ===
تابع <code>repr()</code>الخاصّ بالكائن <code>aRepr</code>. يعيد هذا التابع سلسلة نصية مشابهة لتلك التي تعيدها الدالة الداخلية التي تحمل الاسم ذاته، ولكن مع فرض قيود على أحجام معظم أنواع البيانات.
نسخة من الصنف Repr تستخدم لتقديم دالة repr()‎ الموصوفة أدناه. يؤدي تغيير خصائص هذا الكائن إلى التأثر على حدود الأحجام المستخدمة بواسطة الدالة repr()‎ ومنقّح بايثون.


=== reprlib.repr(obj) ===
=== المزخرف ‎<code>‎@reprlib.recursive_repr(fillvalue="...")‎‎</code> ===
 
وإضافة إلى ما سبق، تقدّم الوحدة مزخرفًا للكشف عن الاستدعاءات التعاودية للتابع ‎<code>__repr__()‎</code> ووضع [[Python/str|سلسلة نصّية]] مكانها. في حال ظهور استدعاء تعاودي، يعيد التابع القيمة المحدّدة في المعامل <code>fillvalue</code>، وفيما عدا ذلك يُستدعى التابع <code>‎__repr__()</code>‎ بصورة طبيعية.
تابع repr()‎ الخاصّ بالكائن aRepr. يعيد هذا التابع سلسلة نصية مشابهة لتلك التي تعيدها الدالة الداخلية التي تحمل الاسم ذاته، ولكن مع فرض قيود على أحجام معظم أنواع البيانات.
 
وإضافة إلى ما سبق، تقدّم الوحدة مزخرفًا للكشف عن الاستدعاءات التعاودية للتابع ‎__repr__()‎ ووضع سلسلة نصّية مكانها.
 
=== ‎‎@reprlib.recursive_repr(fillvalue="...")‎‎ ===
 
مزخرف للتابع ‎__repr__()‎ للكشف عن الاستدعاءات التعاودية ضمن الخيط الواحد. في حال ظهور استدعاء تعاودي، يعيد التابع القيمة المحدّدة في المعامل fillvalue، وفيما عدا ذلك يُستدعى التابع ‎__repr__()‎ بصورة طبيعية.


'''ملاحظة''': هذا المزخرف جديد في الإصدار 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> ===
الحدّ الأقصى للمدخلات الممثلة في التابع المسمّى. القيمة الافتراضية هي 6 للخاصية maxdict، و 5 للخاصية maxarray و 6 للخصائص الأخرى.
الحدّ الأقصى للمدخلات الممثلة للكائن المسمّى في الخاصية. القيمة الافتراضية هي <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 في توثيق بايثون الرسمي.