2011-09-08 16 views
5

मैं की तरहक्यों __str__ कर सकते हैं, str क्यों दूसरे पैरामीटर नहीं मिल सकता है?

print tree 

पेड़ के नोड्स उपयोगकर्ता-निर्मित कक्षाओं के सभी वस्तुओं रहे हैं कुछ का उपयोग कर पेड़ की तरह संरचना में एक पेड़ की सामग्री को प्रिंट करने के लिए str उपयोग करने का फैसला, और मैं उनके __str__ जादू विधि ओवरलोड आदेश है कि

def __str__ (self,t=0) :` 
    return t*'\t' + str(self.label) +':' +'\n'+ str(self.l,t+1)+'\n'+str(self.right,t+1)+'\n' 

तरह मांगपत्र टी टैब के बाद बच्चे नोड्स 'str उपयोग करने के लिए हालांकि मुझे लगता है कि t पैरामीटर के साथ str कॉल नहीं कर सकते, लेकिन मैं node.__ str__(t=4) कॉल कर सकते हैं .Isn't str में, केवल जादू के लिए शॉर्टकट विधि? या वह है क्योंकि पीए जादूगर विधि की जांच किए बिना str पर अतिरिक्त पैराम्स को अस्वीकार करता है?

पीएस मुझे व्यवहार में दिलचस्पी है। मुझे पता है कि पेड़ को मुद्रित करने का सबसे अच्छा तरीका नहीं है, यह एक हैक था;)

उत्तर

7

इस तरह कल्पना कीजिए।

def str(obj): 
    try: 
     return obj.__str__() 
    except ...: 
     ... 

सिर्फ इसलिए कि __str__ अधिक पैरामीटर ले जा सकते हैं, इसका मतलब यह नहीं है कि str के माध्यम से उन पैरामीटर पारित करने के लिए कॉन्फ़िगर किया गया है।

+0

लेकिन यदि स्ट्र आपके उदाहरण में व्यवहार करता है, तो यह काम करेगा अगर obj .__ str __() अपवाद का कारण नहीं बनता है। और यह मेरे मामले में नहीं है। –

+0

मुझे यह मिला, क्षमा करें;) –

+0

@Alexander Ivanov: कोड में '...' कोड है * केवल कोड के उद्देश्यों के लिए * छोड़ा गया कोड *। मैं 'str' का पूरा कार्यान्वयन करने का इरादा नहीं रखता था। –

1

आप एक methode __str__(self, t=0) के साथ एक कक्षा C है, तो str(c)C.__str__(c) रूप में घोषित किया है जो शून्य करने के लिए टी सेट कॉल करेंगे। str() स्वयं केवल एक तर्क स्वीकार करता है।

संबंधित मुद्दे