Python 3.7

reprlib - वैकल्पिक repr () कार्यान्वयन




python

reprlib - वैकल्पिक repr () कार्यान्वयन

स्रोत कोड: Lib/reprlib.py

reprlib मॉड्यूल परिणामी तारों के आकार पर सीमा के साथ वस्तु प्रतिनिधित्व का उत्पादन करने के लिए एक साधन प्रदान करता है। यह पायथन डिबगर में उपयोग किया जाता है और अन्य संदर्भों में भी उपयोगी हो सकता है।

यह मॉड्यूल एक वर्ग, एक उदाहरण और एक फ़ंक्शन प्रदान करता है:

class reprlib.Repr

वर्ग जो स्वरूपित सेवाओं को अंतर्निहित repr() समान कार्यों को लागू करने में उपयोगी प्रदान करता है; विभिन्न ऑब्जेक्ट प्रकारों के लिए आकार की सीमाएँ अभ्यावेदन की पीढ़ी से बचने के लिए जोड़ी जाती हैं जो अत्यधिक लंबी होती हैं।

reprlib.aRepr

यह Repr का एक उदाहरण है जिसका उपयोग नीचे वर्णित repr() फ़ंक्शन प्रदान करने के लिए किया जाता है। इस ऑब्जेक्ट की विशेषताओं को बदलने से repr() और पायथन डीबगर द्वारा उपयोग की जाने वाली आकार सीमा प्रभावित होगी।

reprlib.repr(obj)

यह aRepr का repr() तरीका है। यह उसी नाम के निर्मित फ़ंक्शन द्वारा लौटाए गए स्ट्रिंग के समान है, लेकिन अधिकांश आकारों पर सीमा के साथ।

आकार-सीमित उपकरणों के अलावा, मॉड्यूल __repr__() बदले पुनरावर्ती कॉल का पता लगाने के लिए एक डेकोरेटर भी प्रदान करता है और इसके बजाय एक प्लेसहोल्डर स्ट्रिंग को प्रतिस्थापित करता है।

@reprlib.recursive_repr(fillvalue="...")

एक ही धागे के भीतर पुनरावर्ती कॉल का पता लगाने के लिए __repr__() तरीकों के लिए डेकोरेटर। यदि एक पुनरावर्ती कॉल किया जाता है, तो भरण वापस आ जाता है, अन्यथा, सामान्य __repr__() कॉल किया जाता है। उदाहरण के लिए:

>>> 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'>

संस्करण 3.2 में नया।

ऑब्जेक्ट्स को पुन: प्रिंट करें

Repr इंस्टेंस कई विशेषताओं को प्रदान करता है जो विभिन्न ऑब्जेक्ट प्रकारों के अभ्यावेदन के लिए आकार सीमा प्रदान करने के लिए उपयोग किया जा सकता है, और विशिष्ट ऑब्जेक्ट प्रकारों को प्रारूपित करने वाले तरीके।

Repr.maxlevel

पुनरावर्ती प्रतिनिधित्व के निर्माण पर गहराई की सीमा। डिफ़ॉल्ट 6

Repr.maxdict
Repr.maxlist
Repr.maxtuple
Repr.maxset
Repr.maxfrozenset
Repr.maxdeque
Repr.maxarray

नामित ऑब्जेक्ट प्रकार के लिए प्रतिनिधित्व प्रविष्टियों की संख्या पर सीमा। डिफ़ॉल्ट maxdict लिए 4 , maxdict लिए 5 , और दूसरों के लिए 6 है।

Repr.maxlong

पूर्णांक के लिए प्रतिनिधित्व में वर्णों की अधिकतम संख्या। अंकों को बीच से गिराया जाता है। डिफ़ॉल्ट 40

Repr.maxstring

स्ट्रिंग के प्रतिनिधित्व में वर्णों की संख्या पर सीमा। ध्यान दें कि स्ट्रिंग के "सामान्य" प्रतिनिधित्व को चरित्र स्रोत के रूप में उपयोग किया जाता है: यदि प्रतिनिधित्व में एस्केप अनुक्रमों की आवश्यकता होती है, तो प्रतिनिधित्व छोटा होने पर इन्हें मंगवाया जा सकता है। डिफ़ॉल्ट 30

Repr.maxother

इस सीमा का उपयोग ऑब्जेक्ट प्रकारों के आकार को नियंत्रित करने के लिए किया जाता है, जिसके लिए Repr ऑब्जेक्ट पर कोई विशिष्ट स्वरूपण विधि उपलब्ध नहीं है। इसे maxstring तरीके से लागू किया जाता है। डिफ़ॉल्ट 20

Repr.repr(obj)

उदाहरण के लिए लगाए गए स्वरूपण का उपयोग करने वाले अंतर्निहित repr() बराबर।

Repr.repr1(obj, level)

पुनरावर्ती कार्यान्वयन का उपयोग repr() द्वारा किया जाता है। यह ओब्ज के प्रकार का उपयोग करता है यह निर्धारित करने के लिए कि किस फॉर्मेटिंग विधि को कॉल करना है, इसे ओबीज और स्तर पास करना है । पुनरावर्ती कॉल में स्तर के मूल्य के लिए level - 1 साथ प्रकार-विशिष्ट तरीकों को पुन: स्वरूपण स्वरूपण करने के लिए repr1() कॉल करना चाहिए।

Repr.repr_TYPE(obj, level)

विशिष्ट प्रकारों के लिए स्वरूपण विधियों को नाम के आधार पर नाम के साथ विधियों के रूप में लागू किया जाता है। विधि नाम में, TYPE को '_'.join(type(obj).__name__.split()) से बदल दिया जाता है '_'.join(type(obj).__name__.split()) । इन विधियों के डिस्पैच को repr1() द्वारा नियंत्रित किया जाता है। प्रकार-विशिष्ट तरीके जिन्हें एक मान को पुन: स्वरूपित करने की आवश्यकता self.repr1(subobj, level - 1) को कॉल करना चाहिए।

उप-वस्तुओं को पुन: जमा करना

repr1() द्वारा डायनामिक डिस्पैचिंग के उपयोग से repr1() उपवर्गों को अतिरिक्त अंतर्निहित ऑब्जेक्ट प्रकारों के लिए समर्थन जोड़ने या पहले से समर्थित प्रकारों की हैंडलिंग को संशोधित करने की अनुमति मिलती है। यह उदाहरण दिखाता है कि फ़ाइल ऑब्जेक्ट के लिए विशेष समर्थन कैसे जोड़ा जा सकता है:

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))         # prints '<stdin>'