आप का चयन करने के __repr__
या __str__
के बीच, पहले एक के लिए जाने के डिफ़ॉल्ट कार्यान्वयन __str__
कॉल __repr__
जब यह परिभाषित नहीं किया गया था के रूप में है।
कस्टम Vector3 उदाहरण:
class Vector3(object):
def __init__(self, args):
self.x = args[0]
self.y = args[1]
self.z = args[2]
def __repr__(self):
return "x: {0}, y: {1}, z: {2}".format(self.x, self.y, self.z)
def __str__(self):
return "Vector3([{0},{1},{2}])".format(self.x, self.y, self.z)
इस उदाहरण में, repr
रिटर्न फिर से एक स्ट्रिंग है सीधे सेवन किया जा सकता/निष्पादित, जबकि str
एक डिबग आउटपुट के रूप में अधिक उपयोगी है।
v = Vector3([1,2,3])
print repr(v) #Vector3([1,2,3])
print str(v) #Vector(x:1, y:2, z:3)
मैं किसी प्रकार का वर्ग सजावट बनाना चाहता हूं, इसलिए मैं आसानी से अपने वर्गों के लिए कस्टम स्ट्रिंग प्रस्तुतिकरण सेट कर सकता हूं, जिनमें से प्रत्येक के लिए मेटाक्लास नहीं लिखा जा सकता है। मैं पाइथन के मेटाक्लास से बहुत परिचित नहीं हूं, तो क्या आप मुझे कोई संकेत दे सकते हैं? –
दुर्भाग्यवश यह कक्षा सजावट के साथ नहीं किया जा सकता है; कक्षा निर्धारित होने पर इसे सेट किया जाना चाहिए। –
@ Space_C0wb0y: आप क्लास बॉडी में '_representation' जैसे स्ट्रिंग जोड़ सकते हैं और मेटाक्लास के' __repr __() 'विधि में' self._representation 'लौटा सकते हैं। –