संक्षिप्त उत्तर: 1) पिछड़ा संगतता और 2) वास्तव में इसके लिए कोई अंतर नहीं है। अधिक विस्तृत स्पष्टीकरण के लिए, पढ़ें।
ऐसे परिचालनों के लिए बेवकूफ पायथन दृष्टिकोण विशेष विधियां हैं जिन्हें सीधे कॉल करने का इरादा नहीं है। उदाहरण के लिए, x + y
अपनी खुद की कक्षा के लिए काम करने के लिए, आप __add__
विधि लिखते हैं।यह सुनिश्चित करने के लिए कि int(spam)
आपकी कस्टम क्लास को सही ढंग से परिवर्तित करता है, __int__
विधि लिखें। यह सुनिश्चित करने के लिए कि len(foo)
कुछ समझदार है, __len__
विधि लिखें।
इस तरह चीजें हमेशा पाइथन के साथ रही हैं, और मुझे लगता है कि यह कुछ चीजों के लिए बहुत समझ में आता है। विशेष रूप से, यह ऑपरेटर ओवरलोडिंग को लागू करने के लिए एक समझदार तरीका की तरह लगता है। बाकी के लिए, अलग-अलग भाषा असहमत हैं; रूबी में आप कहने के बजाय spam.to_i
पर कॉल करके कुछ पूर्णांक में परिवर्तित कर देंगे।
आप सही हैं कि पायथन एक अत्यंत ऑब्जेक्ट उन्मुख भाषा है और इसकी लंबाई को प्राप्त करने के लिए ऑब्जेक्ट पर बाहरी फ़ंक्शन को कॉल करना अजीब लगता है। दूसरी तरफ, len(silly_walks)
silly_walks.len()
से अधिक कठिन नहीं है, और गिडो ने कहा है कि वह वास्तव में इसे पसंद करता है (http://mail.python.org/pipermail/python-3000/2006-November/004643.html)।
स्रोत
2008-09-17 14:59:54
कार्य नहीं ली गई है। तरीके हैं आप किस ऑब्जेक्ट की 'लेन' विधि से उत्तराधिकारी बनना चाहेंगे? – tzot
यह अप्रासंगिक है क्योंकि लेन सिर्फ __len__ विधि को कॉल करता है, इसलिए वही विरासत समस्याएं अभी भी लागू होंगी। –
@Eli आपका मतलब '__len__' विधि है - इसलिए बोल्ड के रूप में डबल अंडरस्कोर का अर्थ है। =) – MatrixFrog