2012-12-11 16 views
20

संभव डुप्लिकेट:
Old style and new style classes in Pythonपुरानी शैली और नई शैली की कक्षाएं?

अजगर 2.7 में नई शैली और पुरानी शैली वर्गों के साथ मामलों की वर्तमान स्थिति क्या है? मैं अक्सर पायथन के साथ काम नहीं करता लेकिन मैं इस मुद्दे को अस्पष्ट रूप से याद करता हूं। प्रलेखन इस मुद्दे का बिल्कुल उल्लेख नहीं करता है: The Python Tutorial: Classes। क्या मुझे अभी भी इस बारे में चिंता करने की ज़रूरत है? आम तौर पर मुझे अपनी कक्षाएं घोषित करनी चाहिए:

class MyClass: 
    pass 

या?

class MyClass(object): 
    pass 
+2

@LennartRegebro: यह सवाल 2008 में पूछा गया था, के साथ स्वीकार्य उत्तर 2008 में भी। मैं पूछ रहा था कि 2012 में पाइथन 2.7 के साथ स्थिति क्या है। जवाब उस प्रश्न को पढ़ने से मुझे स्पष्ट नहीं था। – User

+0

क्या आपके पास यह सोचने का कोई कारण है कि उत्तर Python 2.6 से Python 2.7 में बदल गया होगा? हालांकि इससे कोई फर्क नहीं पड़ता। इस सवाल को पोस्ट करने के आपके जो भी कारण हैं, यह एक सटीक डुप्लिकेट है। –

+0

@LennartRegebro: हाँ 4 साल बहुत समय है, बहुत कुछ बदल सकता है। 4 साल पहले पायथन 2.6 का एहसास नहीं हुआ था। – User

उत्तर

21

हमेशा "ऑब्जेक्ट" उपclass। वे नई शैली कक्षाएं हैं।

  • आप इस तरह से अजगर 3 के लिए तैयार हैं।

  • .super() जैसी चीजें ठीक तरह से काम करती हैं, आपको उनकी आवश्यकता होनी चाहिए।

+6

का उपयोग करने के बाद 2.x के लिए नया तरीका विधि सजावट ('@ property',' @ classmethod' और '@ staticmethod') का उल्लेख नहीं करना है। केवल नए शैली के वर्गों के साथ काम करते हैं। –

+3

क्या आप पीई 3 में 'क्लास माई क्लास' नहीं कर सकते हैं और यह अभी भी एक नई स्टाइल क्लास है ?? – GP89

+0

@ जीपी 8 9: हाँ, पायथन 3 में। –

9

आपको हमेशा नई शैली कक्षाओं का उपयोग करना चाहिए। पाइथन प्रोग्रामिंग भाषा में अंतर्निहित प्रकारों और उपयोगकर्ता परिभाषित कक्षाओं को एकीकृत करने के प्रयास के लिए नई शैली कक्षाएं एक प्रयास का हिस्सा हैं।

नई शैली कक्षाओं कई चीजें प्रदान करना जैसे:

  • गुण: गुण है कि प्राप्त/सेट तरीकों
  • स्टेटिक तरीकों और वर्ग तरीकों
  • नई getAttribute हुक तय करता है, जो getattr के विपरीत, प्रत्येक विशेषता पहुंच के लिए कहा जाता है, न कि जब विशेषता उदाहरण
  • में पाया जा सकता है
  • वर्णनकर्ता: एक प्रोटोकॉल निर्माता ओवरराइड वस्तुओं
  • के माध्यम से विशेषता पहुँच के व्यवहार को परिभाषित करने के नई
  • Metaclasses

Source.

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