Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Kế thừa đa lớp (multiple inheritance) trong Python với super()

Theo tài liệu Python, super() hỗ trợ mở rộng nhiều class trong kế thừa. Nó trả về proxy object ủy quyền gọi phương thức cho class cha hoặc anh em cùng kiểu. Hữu ích để truy cập phương thức kế thừa bị ghi đè.

Thứ tự tìm kiếm giống getattr() nhưng bỏ qua chính class hiện tại. Nói cách khác, super() trả về object giả ủy quyền tra cứu thuộc tính cho các class cha trong chuỗi kế thừa.

Điểm quan trọng:

  • Không hoạt động với old-style class (Python 2).
  • Python 2.x: phải truyền class và instance cho super(). Python 3.x: không cần.
  • Xử lý đúng mọi trường hợp kế thừa đa lớp. Method Resolution Order (MRO) được tạo ra, tra cứu theo thứ tự các class cha.

Ví dụ

class BaseA:
    def method(self):
        print("BaseA")

class BaseB:
    def method(self):
        print("BaseB")

class Child(BaseA, BaseB):
    def method(self):
        super().method()  # Gọi BaseA.method()
        print("Child")

c = Child()
c.method()
# Output: BaseA\nChild

MRO của Child: Child -> BaseA -> BaseB -> object.