मुझे एहसास है कि यह एक पुराना सवाल है, लेकिन यह ध्यान देने योग्य है कि अजगर 3 में भी ये दोनों चीजें एक समान नहीं हैं।
यदि आप स्पष्ट रूप से विरासत में प्राप्त objectकर रहे हैं, तो आप जो कर रहे हैं वह उस समय के बिंदुओं की परवाह किए बिना विरासत में मिला है builtins.object ।
इसलिए, मेरे पास कुछ (बहुत निराला) मॉड्यूल हो सकता है जो किसी कारण से ऑब्जेक्ट को ओवरराइड करता है। हम इस पहले मॉड्यूल को "newobj.py" कहेंगे:
import builtins
old_object = builtins.object
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
फिर किसी अन्य फ़ाइल ("klasses.py") में:
class Greeter(object):
pass
class NonGreeter:
pass
फिर एक तीसरी फ़ाइल में (जिसे हम वास्तव में चला सकते हैं):
import newobj, klasses
greeter = klasses.Greeter()
print(greeter.greeting)
non_greeter = klasses.NonGreeter()
print(non_greeter.greeting)
तो आप देख सकते हैं कि, जिस मामले में यह स्पष्ट रूप से वस्तु से विरासत में मिला है, हम एक अलग व्यवहार प्राप्त करते हैं जहां आप निहित विरासत की अनुमति देते हैं।