सबसे पहले, और सबसे महत्वपूर्ण, पाइथन और जावा के बीच तुलना और तुलना करने की कोशिश न करें। वे अलग भाषाएं हैं, विभिन्न अर्थशास्त्र के साथ। तुलना करें और इसके विपरीत केवल इस तरह के भ्रमित प्रश्नों का कारण बन जाएगा जहां आप किसी चीज की तुलना करने की कोशिश कर रहे हैं जो कि कुछ आवश्यक जावा के साथ उपयोग नहीं करता है।
यह संख्या 7 और रंग हरे रंग की तुलना करने जैसा है। वे दोनों संज्ञाएं हैं। इसके अलावा, आपको दोनों की तुलना में परेशानी होगी।
यहां नीचे की रेखा है।
पायथन को इंटरफेस की आवश्यकता नहीं है।
जावा उन्हें आवश्यक है।
एकाधिक वस्तुएं एक ही इंटरफेस को कार्यान्वित कर सकती हैं, लेकिन एकाधिक विरासत इसे भी प्रदान नहीं करती है?
दोनों अवधारणाओं के पास एक दूसरे के साथ लगभग कुछ नहीं करना है।
मैं एक बड़ी संख्या में कक्षाओं को परिभाषित कर सकता हूं जो एक आम इंटरफ़ेस साझा करते हैं। पाइथन में, "बतख टाइपिंग" की वजह से, मुझे सावधानी से यह सुनिश्चित करने की ज़रूरत नहीं है कि उनके पास एक सामान्य सुपरक्लास है।
एक इंटरफ़ेस अलग-अलग वर्ग पदानुक्रमों के लिए "इरादा" की घोषणा है। यह एक सामान्य विनिर्देश प्रदान करता है (जिसे संकलक द्वारा चेक किया जा सकता है) जो कि सरल वर्ग पदानुक्रम का हिस्सा नहीं है। यह कई वर्ग पदानुक्रमों को कुछ सामान्य विशेषताओं को लागू करने और उन सुविधाओं के संबंध में पॉलिमॉर्फिक होने की अनुमति देता है।
पायथन में आप बिना किसी इंटरफेस के हमारे एकाधिक विरासत का उपयोग कर सकते हैं। एकाधिक विरासत में अंतरफलक कक्षाएं शामिल हो सकती हैं या इंटरफ़ेस कक्षाएं शामिल नहीं हो सकती हैं।
जावा में एकाधिक विरासत भी नहीं है। इसके बजाय यह "mixins" नामक एक पूरी तरह से अलग तकनीक का उपयोग करता है। मुख्य रूप से एक "अनुबंध" - - अगर मैं सिर्फ एक विधि पायथन में एक वस्तु, कि कई वर्गों से विरासत में मौजूद रहने पर जांच कर सकते हैं
क्यों मैं "कोई कार्यान्वयन के साथ" एक अंतरफलक बनाने की जरूरत है?
आप अजगर में एक इंटरफेस बनाते हैं तो वह औपचारिक अनुबंध का एक प्रकार हो सकता है। एक दावा है कि सभी सबक्लास पूरी तरह इंटरफ़ेस का दावा करेंगे।
बेशक, एक numbskull झूठ बोलने के लिए पूरी तरह से स्वतंत्र है। वे एक इंटरफेस से उत्तराधिकारी हो सकते हैं और सब कुछ गलत तरीके से लागू कर सकते हैं। सोसायपैथ से बुरा व्यवहार रोकता नहीं है।
आप जावा में एक इंटरफ़ेस बनाते हैं ताकि ऑब्जेक्ट्स के कई वर्गों का सामान्य व्यवहार हो सके। चूंकि आप पाइथन में संकलक को ज्यादा नहीं बताते हैं, इसलिए अवधारणा भी लागू नहीं होती है।
क्या इंटरफेस अन्य भाषाओं में बनाए गए थे क्योंकि वे एकाधिक विरासत प्रदान नहीं करते हैं?
चूंकि अवधारणाएं संबंधित नहीं हैं, इसलिए इसका उत्तर देना मुश्किल है।
जावा में, वे एकाधिक विरासत के बजाय "मिश्रण" का उपयोग करते हैं। "इंटरफ़ेस" अतिरिक्त कार्यक्षमता के कुछ मिश्रण-इन की अनुमति देता है। यह एक इंटरफेस के लिए एक प्रयोग है।
"करता है" से "है" को अलग करने के लिए इंटरफ़ेस का एक अन्य उपयोग। वर्ग पदानुक्रम परिभाषित करता है कि एक वस्तु क्या है। इंटरफ़ेस पदानुक्रम परिभाषित करता है कि कक्षा क्या करती है।
ज्यादातर मामलों में, आईएस और डीओईएस आइसोमोर्फिक हैं, इसलिए कोई भेद नहीं है।
कुछ मामलों में, कोई वस्तु क्या है और कोई वस्तु अलग-अलग होती है।
यह काफी विपरीत सवाल है, लेकिन यह अभी भी निकटता से संबंधित है: http://stackoverflow.com/questions/3062701/why-dont-we-require-interfaces-in- गतिशील- भाषाएं – balpha
'सिंथेटिक' क्या है? मैंने गुमराह किया है और कुछ भी नहीं दिखा रहा है ... –
@mrXexxed: सिंटेक्टिक – Joe