2010-04-06 11 views
43

सभी पायथन बिल्ट-इन्स object के उप-वर्ग हैं और मैं कई उपयोगकर्ता परिभाषित कक्षाओं में भी आ जाता हूं जो कि भी हैं। क्यूं कर? कक्षा object का उद्देश्य क्या है? यह सिर्फ एक खाली वर्ग है, है ना?पायथन में कक्षा "ऑब्जेक्ट" को उपclassing का उद्देश्य क्या है?

उत्तर

45

संक्षेप में, यह मुफ्त जादुई टट्टू सेट करता है।

लंबे समय तक, पायथन 2.2 और पहले "पुरानी शैली कक्षाओं" का उपयोग किया जाता था। वे कक्षाओं का एक विशेष कार्यान्वयन थे, और उनकी कुछ सीमाएं थीं (उदाहरण के लिए, आप बिल्टिन प्रकारों को उपclass नहीं कर सका)। इसके लिए फिक्स कक्षा की एक नई शैली बनाना था। लेकिन, ऐसा करने में कुछ पीछे-असंगत परिवर्तन शामिल होंगे। इसलिए, यह सुनिश्चित करने के लिए कि पुरानी शैली कक्षाओं के लिए लिखा गया कोड अभी भी काम करेगा, object कक्षा सभी नए शैली के वर्गों के लिए सुपरक्लास के रूप में कार्य करने के लिए बनाई गई थी। तो, पायथन 2.X में, class Foo: pass एक पुरानी शैली की कक्षा बनाएगा और class Foo(object): pass एक नई स्टाइल क्लास तैयार करेगा।

अब, Guido के Unifying types and classes in Python 2.2 देखें।

और, सामान्य रूप से, अपने सभी वर्गों को नई शैली बनाने की आदत में जाना एक अच्छा विचार है, क्योंकि कुछ चीजें (@property सजावटकर्ता दिमाग में आता है) पुराने शैली के वर्गों के साथ काम नहीं करेगा ।

+0

@thetaiko कुछ अन्य नई शैली-केवल चीजों को सूचीबद्ध करता है जो जानना अच्छा है। –

+2

वंशावली के लिए, यह उल्लेखनीय है कि नई शैली कक्षाएं Python3 में डिफ़ॉल्ट हैं और उप-वर्ग 'ऑब्जेक्ट' अनावश्यक है। – slightlynybbled

3

दाएं, लेकिन यह कक्षा को new-style कक्षा के रूप में चिह्नित करता है। नए विकसित वर्गों को object आधार का उपयोग करना चाहिए क्योंकि यह आपके कोड को कम और भविष्य के सबूत का खर्च लेता है।

4

इसे कक्षाओं की "नई शैली" के साथ करना है। आप यहाँ इसके बारे में अधिक पढ़ सकते हैं: http://docs.python.org/tutorial/classes.html#multiple-inheritance और भी यहाँ: http://docs.python.org/reference/datamodel.html#new-style-and-classic-classes

नई शैली कक्षाओं का उपयोग करते हुए आप का उपयोग करने की अनुमति देगा "__slots__, वर्णनकर्ता, प्रॉपर्टी और __getattribute __() की तरह पायथन के नए, बहुमुखी सुविधाएं"।

0

लघु संस्करण यह है कि क्लासिक क्लासेस, जिन्हें सुपरक्लास की आवश्यकता नहीं थी, की सीमाएं थीं जो पुराने कोड को तोड़ने के बिना काम नहीं कर सका। इसलिए उन्होंने object से उप-वर्ग की नई शैली की कक्षाओं की अवधारणा बनाई, और अब आप गुणों को परिभाषित करने जैसी अच्छी चीजें कर सकते हैं, और dict उप-वर्गीकरण दर्द और अजीब बग में अब अभ्यास नहीं कर रहे हैं।

विवरण अजगर डॉक्स की धारा 3.3 में हैं: New-style and classic classes.

0

Python 2.2 introduced "new style classes" जो पुरानी शैली वर्ग है जो उपवर्ग वस्तु नहीं था के सापेक्ष अतिरिक्त सुविधाओं के एक नंबर था। Subclasses ऑब्जेक्ट यह इंगित करने का चुना गया तरीका था कि आपकी कक्षा एक नई स्टाइल क्लास होनी चाहिए, पुरानी शैली नहीं।

4

लघु जवाब: उपवर्गीकरण object प्रभावी रूप से यह एक नई शैली वर्ग में आता है

new style वर्गों और old style वर्गों के बीच अंतर के लिए (ध्यान दें कि यह अनावश्यक है अजगर 3.x में स्वत: के बाद से): this stackoverflow question देखते हैं। पूरी कहानी के लिए: this nice writeup on Python Types and Objects देखें।

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