def __repr__(self):
return '<%s %s (%s:%s) %s>' % (
self.__class__.__name__, self.urlconf_name, self.app_name,
self.namespace, self.regex.pattern)
इस विधि का महत्व / उद्देश्य क्या है?
def __repr__(self):
return '<%s %s (%s:%s) %s>' % (
self.__class__.__name__, self.urlconf_name, self.app_name,
self.namespace, self.regex.pattern)
इस विधि का महत्व / उद्देश्य क्या है?
जवाबों:
__repr__वस्तु का मुद्रण योग्य प्रतिनिधित्व, सबसे अधिक संभावना लौट जाना एक संभव तरीके इस वस्तु बनाने के लिए की। आधिकारिक दस्तावेज यहां देखें । __repr__डेवलपर्स के लिए अधिक है जबकि __str__अंतिम उपयोगकर्ताओं के लिए है।
एक सरल उदाहरण:
>>> class Point:
... def __init__(self, x, y):
... self.x, self.y = x, y
... def __repr__(self):
... return 'Point(x=%s, y=%s)' % (self.x, self.y)
>>> p = Point(1, 2)
>>> p
Point(x=1, y=2)
__str__वह आउटपुट है जिसे मानव पठनीय __repr__माना जाता है : माना जाता है कि पाइथन इंटरप्रेटर के लिए पठनीय है (यानी इंटरप्रेटर को स्ट्रिंग को फीड करना ऑब्जेक्ट को फिर से बनाना चाहिए)। यदि किसी ऑब्जेक्ट में एक __str__विधि नहीं है , हालांकि, __repr__इसके बजाय उपयोग किया जाता है। जैसा कि उल्लेख किया गया है: यह उदाहरण वास्तव में की __str__विधि को प्रिंट करता है self.xऔर self.y: स्ट्रिंग प्रारूपण ऑपरेशन के %rबजाय इसका उपयोग किया जाना चाहिए %s(क्योंकि वर्ग परिभाषित नहीं करता है __str__, __repr__वास्तव में वैसे भी वापस आ जाता है, लेकिन यह एक विसंगति है)।
यह पायथन प्रलेखन में बहुत अच्छी तरह से समझाया गया है :
repr ( ऑब्जेक्ट ): किसी स्ट्रिंग को किसी ऑब्जेक्ट के प्रिंट करने योग्य प्रतिनिधित्व से युक्त करें। यह रूपांतरणों (रिवर्स कोट्स) द्वारा प्राप्त समान मूल्य है। कभी-कभी एक साधारण फ़ंक्शन के रूप में इस ऑपरेशन तक पहुंचने में सक्षम होना उपयोगी होता है। कई प्रकारों के लिए, यह फ़ंक्शन एक स्ट्रिंग को वापस करने का प्रयास करता है, जो पास होने पर उसी मूल्य के साथ एक वस्तु प्राप्त करेगा
eval(), अन्यथा प्रतिनिधित्व कोण कोष्ठक में संलग्न एक स्ट्रिंग है जिसमें अतिरिक्त जानकारी के साथ ऑब्जेक्ट के प्रकार का नाम शामिल है अक्सर वस्तु का नाम और पता सहित। एक वर्ग इस बात को नियंत्रित कर सकता है कि यह फ़ंक्शन किस__repr__()विधि को परिभाषित करके अपने उदाहरणों के लिए वापस लौटता है ।
तो जो आप यहां देख रहे हैं वह डिफ़ॉल्ट कार्यान्वयन है __repr__, जो क्रमांकन और डीबगिंग के लिए उपयोगी है।
stackoverflowलेकिन repr ('स्टैकवर्फ़्लोफ़') है 'stackoverflow'।
__repr__कक्षा को प्रिंट करने योग्य प्रारूप में प्रदर्शित करने के लिए स्टैंडअलोन पायथन दुभाषिया द्वारा उपयोग किया जाता है। उदाहरण:
~> python3.5
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 5 2015, 21:12:44)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> class StackOverflowDemo:
... def __init__(self):
... pass
... def __repr__(self):
... return '<StackOverflow demo object __repr__>'
...
>>> demo = StackOverflowDemo()
>>> demo
<StackOverflow demo object __repr__>
ऐसे मामलों में जहां एक __str__विधि को कक्षा में परिभाषित नहीं किया जाता है, यह __repr__प्रिंट करने योग्य प्रतिनिधित्व बनाने के प्रयास में फ़ंक्शन को कॉल करेगा ।
>>> str(demo)
'<StackOverflow demo object __repr__>'
इसके अतिरिक्त, print()कक्षा को __str__डिफ़ॉल्ट रूप से कॉल करेगा ।
प्रलेखन , यदि आप कृपया
__Repr__ विधि बस अजगर बताता है कि कैसे एक वर्ग की वस्तुओं मुद्रित करने के लिए
उनके बीच अंतर देखने के लिए एक उदाहरण (मैंने इस स्रोत से कॉपी किया ),
>>> x=4
>>> repr(x)
'4'
>>> str(x)
'4'
>>> y='stringy'
>>> repr(y)
"'stringy'"
>>> str(y)
'stringy'
के रिटर्न repr()और str()के लिए समान हैं int x, लेकिन वहाँ के लिए बदले मूल्यों में अंतर होता है str y- एक है औपचारिक और अन्य है अनौपचारिक । औपचारिक और अनौपचारिक अभ्यावेदन के बीच सबसे महत्वपूर्ण अंतर यह है कि __repr__एक स्ट्रिंग मूल्य के लिए डिफ़ॉल्ट कार्यान्वयन को निष्कासन के तर्क के रूप में कहा जा सकता है, और वापसी मूल्य इस तरह एक वैध स्ट्रिंग ऑब्जेक्ट होगा:
>>> repr(y)
"'a string'"
>>> y2=eval(repr(y))
>>> y==y2
True
यदि आप __str__निकासी के तर्क के रूप में रिटर्न वैल्यू को कॉल करने का प्रयास करते हैं , तो परिणाम मान्य नहीं होगा।
जब हम कक्षाओं को परिभाषित करके नए प्रकार का निर्माण करते हैं, तो हम नई कक्षाओं का उपयोग करने के लिए सुविधाजनक बनाने के लिए पायथन की कुछ विशेषताओं का लाभ उठा सकते हैं। इन विशेषताओं में से एक "विशेष विधियां" हैं, जिन्हें "जादू विधियों" के रूप में भी जाना जाता है।
विशेष विधियों के नाम हैं जो दो अंडरस्कोर के साथ शुरू और समाप्त होते हैं। हम उन्हें परिभाषित करते हैं, लेकिन आमतौर पर उन्हें सीधे नाम से नहीं बुलाते हैं। इसके बजाय, वे विशिष्ट परिस्थितियों में स्वचालित रूप से निष्पादित करते हैं।
प्रिंट स्टेटमेंट का उपयोग करके किसी वस्तु के उदाहरण के मूल्य को आउटपुट करने में सक्षम होना सुविधाजनक है। जब हम ऐसा करते हैं, तो हम चाहेंगे कि आउटपुट को कुछ समझ से बाहर के प्रारूप में दर्शाया जाए। ऐसा होने की व्यवस्था करने के लिए रीप स्पेशल विधि का उपयोग किया जा सकता है। यदि हम इस पद्धति को परिभाषित करते हैं, तो यह स्वचालित रूप से कहा जा सकता है जब हम उस वर्ग के उदाहरण का मूल्य प्रिंट करते हैं जिसके लिए हमने इस पद्धति को परिभाषित किया था। यह उल्लेख किया जाना चाहिए, हालांकि, वहाँ भी एक है कि str विशेष विधि, एक समान के लिए इस्तेमाल किया, लेकिन नहीं समान उद्देश्य, कि पूर्वता मिल सकता है, अगर हम भी इसे परिभाषित किया है।
हम परिभाषित नहीं किया है, रेपर Point3D वर्ग के लिए विधि, और Point3D का एक उदाहरण के रूप में instantiated my_point है, और फिर हम ऐसा करते हैं ...
my_point प्रिंट करें ... हम इसे आउटपुट के रूप में देख सकते हैं ...
बहुत अच्छा नहीं है, एह?
तो, हम बेहतर उत्पादन प्राप्त करने के लिए repr या str विशेष विधि या दोनों को परिभाषित करते हैं ।
**class Point3D(object):
def __init__(self,a,b,c):
self.x = a
self.y = b
self.z = c
def __repr__(self):
return "Point3D(%d, %d, %d)" % (self.x, self.y, self.z)
def __str__(self):
return "(%d, %d, %d)" % (self.x, self.y, self.z)
my_point = Point3D(1, 2, 3)
print my_point # __repr__ gets called automatically
print my_point # __str__ gets called automatically**
आउटपुट ...
(1, 2, 3) (1, 2, 3)
आपके द्वारा कार्यान्वित हर वर्ग के लिए repr को लागू करें। कोई बहाना नहीं होना चाहिए। लागू str वर्ग है जो आपको लगता है पठनीयता गैर अस्पष्टता की ज्यादा महत्वपूर्ण है के लिए।
इस लिंक को देखें: https://www.pythoncentral.io/what-is-the-difference-between- str -and- repr -in-python /
>>> variableकि__repr__()रिटर्न क्यों छापता है?