Computer >> Máy Tính >  >> Lập trình >> Python

Các biến lớp hoạt động như thế nào trong các lớp Python đa kế thừa?


Một lớp có thể được bắt nguồn từ nhiều hơn một lớp cơ sở trong Python. Đây được gọi là đa kế thừa.

Trong đa kế thừa, các tính năng của tất cả các lớp cơ sở được kế thừa vào lớp dẫn xuất. Cú pháp của đa kế thừa tương tự như thừa kế đơn.

class Super1:
    pass
class Super2:
    pass
class MultiDerived(Super1, Super2):
   pass

Trong kịch bản đa kế thừa, bất kỳ thuộc tính nào được chỉ định sẽ được tìm kiếm đầu tiên trong lớp hiện tại. Nếu không tìm thấy, tìm kiếm sẽ tiếp tục vào các lớp cha theo chiều sâu từ trái sang phải mà không cần tìm kiếm cùng một lớp hai lần.

Vì vậy, trong ví dụ trên về lớp MultiDerived, thứ tự tìm kiếm là [MultiDerived, Super1, Super2, object]. Thứ tự này còn được gọi là tuyến tính hóa của lớp MultiDerived và tập hợp các quy tắc được sử dụng để tìm thứ tự này được gọi là Thứ tự phân giải phương pháp (MRO).

MRO đảm bảo rằng một lớp luôn xuất hiện trước cha mẹ của nó và trong trường hợp có nhiều cha mẹ, thứ tự giống như nhiều lớp cơ sở.

MRO của một lớp có thể được xem như thuộc tính __mro__ hoặc phương thức mro (). Cái trước trả về một bộ giá trị trong khi cái sau trả về một danh sách.

>>> MultiDerived.mro()
[<class '__main__.MultiDerived'>,
 <class '__main__.Super1'>,
 <class '__main__.Super2'>,
 <class 'object'>]