Tôi nhận ra rằng đây là một câu hỏi cũ, nhưng điều đáng chú ý là ngay cả trong python 3, hai điều này không hoàn toàn giống nhau.
Nếu bạn kế thừa rõ ràng từ object, những gì bạn thực sự đang làm là kế thừa từ builtins.object bất kể điều đó trỏ đến tại thời điểm nào.
Do đó, tôi có thể có một số mô-đun (rất kỳ quặc) ghi đè đối tượng vì một số lý do. Chúng tôi sẽ gọi mô-đun đầu tiên này là "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
Sau đó, trong một số tệp khác ("klasses.py"):
class Greeter(object):
pass
class NonGreeter:
pass
Sau đó, trong tệp thứ ba (mà chúng tôi thực sự có thể chạy):
import newobj, klasses
greeter = klasses.Greeter()
print(greeter.greeting)
non_greeter = klasses.NonGreeter()
print(non_greeter.greeting)
Vì vậy, bạn có thể thấy rằng, trong trường hợp nó được kế thừa rõ ràng từ đối tượng, chúng tôi nhận được một hành vi khác với nơi bạn cho phép kế thừa ngầm định.