Hướng dẫn python multiple inheritance super - python đa thừa kế siêu
Ngày đăng:
08/11/2022
Trả lời:
0
Lượt xem:
142
Tổng thểGiả sử mọi thứ đi xuống từ 2 (bạn tự mình nếu không), Python tính toán một thứ tự phân giải phương thức (MRO) dựa trên cây kế thừa lớp của bạn. MRO thỏa mãn 3 thuộc tính: Show
Nếu không có thứ tự như vậy tồn tại, lỗi Python. Các hoạt động bên trong của điều này là một lớp lót C3 của tổ tiên. Đọc tất cả về nó ở đây: https://www.python.org/doad/releases/2.3/mro/ Khi một phương thức được gọi, lần xuất hiện đầu tiên của phương pháp đó trong MRO là phương pháp được gọi là. Bất kỳ lớp nào không thực hiện phương pháp đó đều bị bỏ qua. Bất kỳ cuộc gọi nào đến 3 trong phương thức đó sẽ gọi sự xuất hiện tiếp theo của phương thức đó trong MRO. Do đó, nó quan trọng cả thứ mà bạn đặt các lớp trong kế thừa và nơi bạn thực hiện các cuộc gọi đến 3 trong các phương thức.Lưu ý rằng bạn có thể thấy MRO trong Python bằng cách sử dụng phương thức 5.Ví dụTất cả các ví dụ sau đây có một kế thừa kim cương của các lớp như vậy:
MRO là:
Bạn có thể kiểm tra điều này bằng cách gọi 6, trả về:
Với (__main__.Child, __main__.Left, __main__.Right, __main__.Parent, object) 3 đầu tiên trong mỗi phương thức
8 Đầu ra:
Với (__main__.Child, __main__.Left, __main__.Right, __main__.Parent, object) 3 cuối cùng trong mỗi phương thức
8 Đầu ra:
parent right left childVới 3 cuối cùng trong mỗi phương thức
8 Đầu ra:
Với 3 cuối cùng trong mỗi phương thứcKhi không phải tất cả các lớp đều gọi 3Lệnh kế thừa quan trọng nhất nếu không phải tất cả các lớp trong chuỗi kế thừa gọi (__main__.Child, __main__.Left, __main__.Right, __main__.Parent, object) 3. Ví dụ: nếu class Parent(object): def __init__(self): super(Parent, self).__init__() print("parent") class Left(Parent): def __init__(self): super(Left, self).__init__() print("left") class Right(Parent): def __init__(self): super(Right, self).__init__() print("right") class Child(Left, Right): def __init__(self): super(Child, self).__init__() print("child") 3 không gọi Super, thì phương thức trên class Parent(object): def __init__(self): super(Parent, self).__init__() print("parent") class Left(Parent): def __init__(self): super(Left, self).__init__() print("left") class Right(Parent): def __init__(self): super(Right, self).__init__() print("right") class Child(Left, Right): def __init__(self): super(Child, self).__init__() print("child") 4 và class Parent(object): def __init__(self): super(Parent, self).__init__() print("parent") class Left(Parent): def __init__(self): super(Left, self).__init__() print("left") class Right(Parent): def __init__(self): super(Right, self).__init__() print("right") class Child(Left, Right): def __init__(self): super(Child, self).__init__() print("child") 5 không bao giờ được gọi:Ngoài ra, nếu 4 không gọi 3, 5 vẫn bị bỏ qua:Ở đây, 8 đầu ra: 0
1 |