मुझे एहसास है कि यह एक पुराना सवाल है, लेकिन यह ध्यान देने योग्य है कि यहां तक कि अजगर 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
तो आप देख सकते हैं इस मामले में जहां यह स्पष्ट रूप से वस्तु से इनहेरिट है,, हम जहां निहित विरासत की अनुमति देने से एक अलग व्यवहार मिलता है।
स्रोत
2017-08-26 09:03:10
यदि आपका कोड 2.x के तहत भी उपयोग किया जाएगा, तो यह स्पष्ट होना अच्छा है। – smci