2009-08-06 6 views
48

जब आप पाइथन में कक्षा बनाते हैं तो पुरानी पायथन संस्करण में, यह ऑब्जेक्ट से प्राप्त हो सकता है, जहां तक ​​मैं एक विशेष अंतर्निहित पायथन तत्व को समझता हूं जो आपकी ऑब्जेक्ट को एक नई-शैली वस्तु होने की अनुमति देता है।क्या Python 3.x में पायथन की ऑब्जेक्ट से प्राप्त करने के लिए यह आवश्यक या उपयोगी है?

नए संस्करण (> 3.0 और 2.6) के बारे में क्या? मैं कक्षा वस्तु के बारे में googled लेकिन मुझे इतना परिणाम मिलता है (एक स्पष्ट कारणों के लिए)। कोई संकेत?

धन्यवाद!

+2

यदि आपका कोड 2.x के तहत भी उपयोग किया जाएगा, तो यह स्पष्ट होना अच्छा है। – smci

उत्तर

39

आपको पाइथन 3 में नई शैली रखने के लिए object से उत्तराधिकारी की आवश्यकता नहीं है। सभी कक्षाएं नई शैली हैं।

+0

धन्यवाद :) मैंने ऑनलाइन पुस्तक (पायटन के एक बाइट) और बहुत सारे पायथन के डॉक्टर को देखा लेकिन मुझे कभी भी मेरा जवाब स्पष्ट नहीं मिला ... – thomas

+0

पायथन 2.6 के बारे में क्या? – luc

+3

पायथन 2.6 अजगर के रूप में व्यवहार करता है 2.x – SilentGhost

22

मुझे एहसास है कि यह एक पुराना सवाल है, लेकिन यह ध्यान देने योग्य है कि यहां तक ​​कि अजगर 3 में भी ये दो चीजें एक जैसी चीज नहीं हैं।

यदि आप स्पष्ट रूप से object से उत्तराधिकारी हैं, तो आप वास्तव में क्या कर रहे हैं builtins.objectसे विरासत में है जो उस समय के बिंदुओं के बावजूद है।

इसलिए, मेरे पास कुछ (बहुत निराला) मॉड्यूल हो सकता है जो किसी कारण से वस्तु को ओवरराइड करता है। फिर कुछ अन्य फाइल "(klasses.py") में

import builtins 

old_object = builtins.object # otherwise cyclic dependencies 

class new_object(old_object): 

    def __init__(self, *args, **kwargs): 
     super(new_object, self).__init__(*args, **kwargs) 
     self.greeting = "Hello World!" 

builtins.object = new_object #overrides the default object 

:

class Greeter(object): 
    pass 

class NonGreeter: 
    pass 

फिर एक तिहाई फ़ाइल में (जो हम वास्तव में कर सकते हैं हम इस पहले मॉड्यूल "newobj.py" फोन करता हूँ चलाने):

import newobj, klasses # This order matters! 

greeter = klasses.Greeter() 
print(greeter.greeting) # prints the greeting in the new __init__ 

non_greeter = klasses.NonGreeter() 
print(non_greeter.greeting) # throws an attribute error 

तो आप देख सकते हैं इस मामले में जहां यह स्पष्ट रूप से वस्तु से इनहेरिट है,, हम जहां निहित विरासत की अनुमति देने से एक अलग व्यवहार मिलता है।

+4

पागलपन के लिए उपरोक्त! अद्भुत विचार! –

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