ฉันรู้ว่านี่เป็นคำถามเก่า แต่ก็น่าสังเกตว่าแม้ใน python 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)
ดังนั้นคุณจะเห็นได้ว่าในกรณีที่สืบทอดมาจากวัตถุอย่างชัดเจนเราจะได้รับพฤติกรรมที่แตกต่างจากที่คุณอนุญาตให้มีการสืบทอดโดยนัย