Trong cuốn sách Python in a Nutshell (Phiên bản thứ 2) có một ví dụ sử dụng
các lớp kiểu cũ để chứng minh cách các phương thức được giải quyết theo thứ tự phân giải cổ điển và
nó khác với thứ tự mới như thế nào.
Tôi đã thử cùng một ví dụ bằng cách viết lại ví dụ theo kiểu mới nhưng kết quả không khác gì so với những gì thu được với các lớp kiểu cũ. Phiên bản python tôi đang sử dụng để chạy ví dụ là 2.5.2. Dưới đây là ví dụ:
class Base1(object):
def amethod(self): print "Base1"
class Base2(Base1):
pass
class Base3(object):
def amethod(self): print "Base3"
class Derived(Base2,Base3):
pass
instance = Derived()
instance.amethod()
print Derived.__mro__
Cuộc gọi instance.amethod()
in ra Base1
, nhưng theo hiểu biết của tôi về MRO với kiểu lớp mới thì đầu ra đáng lẽ phải như vậy Base3
. Cuộc gọi Derived.__mro__
in ra:
(<class '__main__.Derived'>, <class '__main__.Base2'>, <class '__main__.Base1'>, <class '__main__.Base3'>, <type 'object'>)
Tôi không chắc liệu hiểu biết của tôi về MRO với các lớp kiểu mới có sai hay tôi đang mắc một sai lầm ngớ ngẩn mà tôi không thể phát hiện ra. Vui lòng giúp tôi hiểu rõ hơn về MRO.