सभी पायथन बिल्ट-इन्स object
के उप-वर्ग हैं और मैं कई उपयोगकर्ता परिभाषित कक्षाओं में भी आ जाता हूं जो कि भी हैं। क्यूं कर? कक्षा object
का उद्देश्य क्या है? यह सिर्फ एक खाली वर्ग है, है ना?पायथन में कक्षा "ऑब्जेक्ट" को उपclassing का उद्देश्य क्या है?
उत्तर
संक्षेप में, यह मुफ्त जादुई टट्टू सेट करता है।
लंबे समय तक, पायथन 2.2 और पहले "पुरानी शैली कक्षाओं" का उपयोग किया जाता था। वे कक्षाओं का एक विशेष कार्यान्वयन थे, और उनकी कुछ सीमाएं थीं (उदाहरण के लिए, आप बिल्टिन प्रकारों को उपclass नहीं कर सका)। इसके लिए फिक्स कक्षा की एक नई शैली बनाना था। लेकिन, ऐसा करने में कुछ पीछे-असंगत परिवर्तन शामिल होंगे। इसलिए, यह सुनिश्चित करने के लिए कि पुरानी शैली कक्षाओं के लिए लिखा गया कोड अभी भी काम करेगा, object
कक्षा सभी नए शैली के वर्गों के लिए सुपरक्लास के रूप में कार्य करने के लिए बनाई गई थी। तो, पायथन 2.X में, class Foo: pass
एक पुरानी शैली की कक्षा बनाएगा और class Foo(object): pass
एक नई स्टाइल क्लास तैयार करेगा।
अब, Guido के Unifying types and classes in Python 2.2 देखें।
और, सामान्य रूप से, अपने सभी वर्गों को नई शैली बनाने की आदत में जाना एक अच्छा विचार है, क्योंकि कुछ चीजें (@property
सजावटकर्ता दिमाग में आता है) पुराने शैली के वर्गों के साथ काम नहीं करेगा ।
दाएं, लेकिन यह कक्षा को new-style कक्षा के रूप में चिह्नित करता है। नए विकसित वर्गों को object
आधार का उपयोग करना चाहिए क्योंकि यह आपके कोड को कम और भविष्य के सबूत का खर्च लेता है।
इसे कक्षाओं की "नई शैली" के साथ करना है। आप यहाँ इसके बारे में अधिक पढ़ सकते हैं: http://docs.python.org/tutorial/classes.html#multiple-inheritance और भी यहाँ: http://docs.python.org/reference/datamodel.html#new-style-and-classic-classes
नई शैली कक्षाओं का उपयोग करते हुए आप का उपयोग करने की अनुमति देगा "__slots__, वर्णनकर्ता, प्रॉपर्टी और __getattribute __() की तरह पायथन के नए, बहुमुखी सुविधाएं"।
लघु संस्करण यह है कि क्लासिक क्लासेस, जिन्हें सुपरक्लास की आवश्यकता नहीं थी, की सीमाएं थीं जो पुराने कोड को तोड़ने के बिना काम नहीं कर सका। इसलिए उन्होंने object
से उप-वर्ग की नई शैली की कक्षाओं की अवधारणा बनाई, और अब आप गुणों को परिभाषित करने जैसी अच्छी चीजें कर सकते हैं, और dict
उप-वर्गीकरण दर्द और अजीब बग में अब अभ्यास नहीं कर रहे हैं।
विवरण अजगर डॉक्स की धारा 3.3 में हैं: New-style and classic classes.
Python 2.2 introduced "new style classes" जो पुरानी शैली वर्ग है जो उपवर्ग वस्तु नहीं था के सापेक्ष अतिरिक्त सुविधाओं के एक नंबर था। Subclasses ऑब्जेक्ट यह इंगित करने का चुना गया तरीका था कि आपकी कक्षा एक नई स्टाइल क्लास होनी चाहिए, पुरानी शैली नहीं।
लघु जवाब: उपवर्गीकरण object
प्रभावी रूप से यह एक नई शैली वर्ग में आता है
new style
वर्गों और old style
वर्गों के बीच अंतर के लिए (ध्यान दें कि यह अनावश्यक है अजगर 3.x में स्वत: के बाद से): this stackoverflow question देखते हैं। पूरी कहानी के लिए: this nice writeup on Python Types and Objects देखें।
- 1. सी ++ में कक्षा को टाइप करने का उद्देश्य क्या है?
- 2. पायथन के itertools.repeat में क्या उद्देश्य है?
- 3. फ़ाइल ऑब्जेक्ट में webkitRelativePath प्रॉपर्टी का उद्देश्य क्या है?
- 4. पायथन में @ प्रतीकों का उद्देश्य?
- 5. उद्देश्य-सी "कक्षा निरंतरता" क्या है?
- 6. जावा: जेनेरिक क्लास को उपclassing
- 7. एक आंतरिक कक्षा का उद्देश्य?
- 8. PHP में इंटरफेस का उद्देश्य क्या है?
- 9. IntentSender का उद्देश्य क्या है?
- 10. ज़ेंड में बूटस्ट्रैप का उद्देश्य क्या है?
- 11. पायथन: सजावट को कक्षा
- 12. पायथन कक्षा
- 13. सी # में, कक्षा स्थिर को चिह्नित करने का उद्देश्य क्या है?
- 14. क्या उद्देश्य सी में CLHeading ऑब्जेक्ट बनाना संभव है?
- 15. PHP में कक्षा क्या है?
- 16. बाहरी वर्ग ऑब्जेक्ट को आंतरिक कक्षा ऑब्जेक्ट
- 17. क्या टीटीमर ऑब्जेक्ट डेल्फी कक्षा का क्षेत्र हो सकता है?
- 18. क्या .NET के लिए कोई सामान्य उद्देश्य ऑब्जेक्ट पूल है?
- 19. जावा क्लास लोडर का उद्देश्य क्या है?
- 20. क्या उद्देश्य-सी में + आवंटन को ओवरराइड करने के लिए कक्षा की आवश्यकता है?
- 21. उद्देश्य सी - KeyValuePair कक्षा?
- 22. क्या रूबी ऑब्जेक्ट की कक्षा को बदलना संभव है?
- 23. क्लोजर में ~ 'या' ~ का उद्देश्य क्या है?
- 24. जावास्क्रिप्ट में विंडो ऑब्जेक्ट को संदर्भित करने का उद्देश्य क्या है?
- 25. jQuery में $ .cache का उद्देश्य क्या है?
- 26. जावास्क्रिप्ट में eval का उद्देश्य उद्देश्य क्या है?
- 27. उद्देश्य सी कक्षा या संरचना?
- 28. स्ट्रिंग का उद्देश्य क्या है। अंतर्निहित?
- 29. वर्ग निकाय में कक्षा का पायथन नाम
- 30. किसी BsonDocument ऑब्जेक्ट को कक्षा
@thetaiko कुछ अन्य नई शैली-केवल चीजों को सूचीबद्ध करता है जो जानना अच्छा है। –
वंशावली के लिए, यह उल्लेखनीय है कि नई शैली कक्षाएं Python3 में डिफ़ॉल्ट हैं और उप-वर्ग 'ऑब्जेक्ट' अनावश्यक है। – slightlynybbled