Kiểu Python gợi ý đa kế thừa

Đa kế thừa trong Python

Cải thiện bài viết

Lưu bài viết

Thích bài viết

  • Độ khó. Dễ dàng
  • Cập nhật lần cuối. 22 tháng 2 năm 2022

  • Đọc
  • Bàn luận
  • khóa học
  • Luyện tập
  • Băng hình
  • Cải thiện bài viết

    Lưu bài viết

    Kế thừa là cơ chế để đạt được khả năng sử dụng lại mã vì một lớp [lớp con] có thể lấy được các thuộc tính của lớp khác [lớp cha]. Nó cũng cung cấp tính bắc cầu tức là. nếu lớp C kế thừa từ P thì tất cả các lớp con của C cũng kế thừa từ P
     

    Đa thừa kế
    Khi một lớp được dẫn xuất từ ​​nhiều hơn một lớp cơ sở, nó được gọi là đa kế thừa. Lớp dẫn xuất kế thừa tất cả các tính năng của trường hợp cơ sở
     

     

    Syntax:
    
    Class Base1:
           Body of the class
    
    Class Base2:
         Body of the class
    
    Class Derived[Base1, Base2]:
         Body of the class

    Trong phần tiếp theo, chúng ta sẽ xem vấn đề gặp phải trong quá trình đa thừa kế và cách giải quyết vấn đề đó với sự trợ giúp của các ví dụ
     

    Vấn đề kim cương
     

    Nó đề cập đến sự mơ hồ phát sinh khi hai lớp Class2 và Class3 kế thừa từ một lớp cha Class1 và lớp Class4 kế thừa từ cả Class2 và Class3. Nếu có một phương thức “m” là một phương thức bị ghi đè ở một trong hai Lớp 2 và Lớp 3 hoặc cả hai thì sẽ có sự không rõ ràng rằng phương thức nào trong số “m” Lớp 4 sẽ kế thừa
     

    Khi phương thức bị ghi đè trong cả hai lớp
     

    Python3




    # Python Program to depict multiple inheritance

    # when method is overridden in both classes

     

    class

    In Class2
    0

    In Class2
    1
    In Class2
    2
    In Class2
    3
    In Class2
    4
    In Class2
    5

    In Class2
    6
    In Class2
    7
    In Class2
    8
    In Class2
    9_______11_______0

    In Class3
    1

    class

    In Class3
    3

    In Class2
    1
    In Class2
    2
    In Class2
    3
    In Class2
    4
    In Class2
    5

    In Class2
    6
    In Class2
    7
    In Class2
    8
    In Class4
    In Class2
    In Class3
    In Class1
    2
    In Class3
    0

     

    class

    In Class4
    In Class2
    In Class3
    In Class1
    5

    In Class2
    1
    In Class2
    2
    In Class2
    3
    In Class2
    4
    In Class2
    5

    In Class2
    6
    In Class2
    7
    In Class2
    8
    In Class4
    In Class2
    In Class3
    In Class1
    4_______22_______5

    In Class4
    In Class2
    In Class3
    In Class1
    6

    class

    In Class4
    In Class2
    In Class3
    In Class1
    8

    In Class2
    1
    In Class4
    In Class2
    In Class1
    In Class3
    In Class1
    0

    In Class2
    1

    In Class4
    In Class2
    In Class1
    In Class3
    In Class1
    2
    In Class4
    In Class2
    In Class1
    In Class3
    In Class1
    3
    In Class4
    In Class2
    In Class1
    In Class3
    In Class1
    4

    In Class4
    In Class2
    In Class1
    In Class3
    In Class1
    5

    đầu ra

    In Class2

    Ghi chú. Khi bạn gọi obj. m[] [m trong trường hợp của Lớp 4] đầu ra là Ở Lớp 2. Nếu Class4 được khai báo là Class 4[Class 3, Class 2] thì đầu ra của obj. m[] sẽ ở Lớp 3
     

    Khi phương thức bị ghi đè ở một trong các lớp
     

    Python3




    # Python Program to depict multiple inheritance

    In Class4
    In Class2
    In Class1
    In Class3
    In Class1
    7

     

    class

    In Class2
    0

    In Class2
    1
    In Class2
    2
    In Class2
    3
    In Class2
    4
    In Class2
    5

    In Class2
    6
    In Class2
    7
    In Class2
    8
    In Class2
    9_______11_______0

    In Class3
    1

    class

    In Class3
    3

    In Class2
    1
    In Class4
    In Class2
    In Class1
    In Class3
    In Class1
    0

     

    class

    In Class4
    In Class2
    In Class3
    In Class1
    5

    In Class2
    1
    In Class2
    2
    In Class2
    3
    In Class2
    4
    In Class2
    5

    In Class2
    6
    In Class2
    7
    In Class2
    8
    In Class4
    In Class2
    In Class3
    In Class1
    4# when method is overridden in both classes6

    # when method is overridden in both classes7

    class

    In Class4
    In Class2
    In Class3
    In Class1
    8

    In Class2
    1
    In Class4
    In Class2
    In Class1
    In Class3
    In Class1
    0

     

    In Class4
    In Class2
    In Class1
    In Class3
    In Class1
    2
    In Class4
    In Class2
    In Class1
    In Class3
    In Class1
    3
    In Class4
    In Class2
    In Class1
    In Class3
    In Class1
    4

    In Class4
    In Class2
    In Class1
    In Class3
    In Class1
    5

    đầu ra

    In Class3

    Khi mọi lớp định nghĩa cùng một phương thức

    Python3




    # Python Program to depict multiple inheritance

    class7

     

    class

    In Class2
    0

    In Class2
    1
    In Class2
    2
    In Class2
    3
    In Class2
    4
    In Class2
    5

    In Class2
    6
    In Class2
    7
    In Class2
    8
    In Class2
    9_______11_______0

    In Class3
    1

    class

    In Class3
    3

    In Class2
    1
    In Class2
    2
    In Class2
    3
    In Class2
    4
    In Class2
    5

    In Class2
    6
    In Class2
    7
    In Class2
    8
    In Class4
    In Class2
    In Class3
    In Class1
    2
    In Class3
    0

     

    class

    In Class4
    In Class2
    In Class3
    In Class1
    5

    In Class2
    1
    In Class2
    2
    In Class2
    3
    In Class2
    4
    In Class2
    5

    In Class2
    30_______1_______7
    In Class2
    8
    In Class4
    In Class2
    In Class3
    In Class1
    4
    In Class2
    34

    In Class2
    1

    class

    In Class4
    In Class2
    In Class3
    In Class1
    8

    In Class2
    1
    In Class2
    2
    In Class2
    3
    In Class2
    4
    In Class2
    5

    In Class2
    6
    In Class2
    7
    In Class2
    8
    In Class2
    46
    In Class2
    47

     

    In Class4
    In Class2
    In Class1
    In Class3
    In Class1
    2
    In Class4
    In Class2
    In Class1
    In Class3
    In Class1
    3
    In Class4
    In Class2
    In Class1
    In Class3
    In Class1
    4

    In Class4
    In Class2
    In Class1
    In Class3
    In Class1
    5

     

    In Class2
    52

    In Class2
    53

    In Class2
    54

    đầu ra

    In Class4
    In Class2
    In Class3
    In Class1

    Đầu ra của phương thức obj. m[] trong đoạn mã trên là Lớp 4. Phương thức “m” của Class4 được thực thi. Để thực thi phương thức “m” của các lớp khác, có thể thực hiện bằng cách sử dụng tên lớp
    Bây giờ, để gọi phương thức m cho Class1, Class2, Class3 trực tiếp từ phương thức “m” của Class4, hãy xem ví dụ bên dưới
     

    Python3




    # Python Program to depict multiple inheritance

    In Class2
    56

    In Class2
    57

    In Class2
    58

    class

    In Class2
    0

    In Class2
    1
    In Class2
    2
    In Class2
    3
    In Class2
    4
    In Class2
    5

    In Class2
    6
    In Class2
    7
    In Class2
    8
    In Class2
    9_______22_______5

    # when method is overridden in both classes7

    class

    In Class3
    3

    In Class2
    1
    In Class2
    2
    In Class2
    3
    In Class2
    4
    In Class2
    5

    In Class2
    6
    In Class2
    7
    In Class2
    8
    In Class4
    In Class2
    In Class3
    In Class1
    2
    In Class3
    0

     

    class

    In Class4
    In Class2
    In Class3
    In Class1
    5

    In Class2
    1
    In Class2
    2
    In Class2
    3
    In Class2
    4
    In Class2
    5

    In Class2
    6
    In Class2
    7
    In Class2
    8
    In Class4
    In Class2
    In Class3
    In Class1
    4_______1_______34

    In Class2
    1

    class

    In Class4
    In Class2
    In Class3
    In Class1
    8

    In Class2
    1
    In Class2
    2
    In Class2
    3
    In Class2
    4
    In Class2
    5

    In Class2
    6
    In Class2
    7
    In Class2
    8
    In Class2
    46
    In Class2
    47

    In Class2
    6
    In Class3
    10
    In Class2
    4
    In Class3
    0

    In Class2
    6
    In Class3
    14
    In Class2
    4
    In Class3
    0

    In Class2
    6
    In Class3
    18
    In Class2
    4
    In Class3
    0

     

    In Class4
    In Class2
    In Class1
    In Class3
    In Class1
    2
    In Class4
    In Class2
    In Class1
    In Class3
    In Class1
    3
    In Class4
    In Class2
    In Class1
    In Class3
    In Class1
    4

    In Class4
    In Class2
    In Class1
    In Class3
    In Class1
    5

    đầu ra

    In Class4
    In Class2
    In Class3
    In Class1

    Để gọi “m” của Lớp 1 từ cả “m” của Lớp 2 và “m” của Lớp 3 thay vì Lớp 4 được hiển thị bên dưới

    Python3




    # Python Program to depict multiple inheritance

    In Class3
    26

    In Class3
    27

     

    class

    In Class2
    0

    In Class2
    1
    In Class2
    2
    In Class2
    3
    In Class2
    4
    In Class2
    5

    In Class2
    6
    In Class2
    7
    In Class2
    8
    In Class2
    9_______1_______47

    In Class2
    1

    class

    In Class3
    3

    In Class2
    1
    In Class2
    2
    In Class2
    3
    In Class2
    4
    In Class2
    5

    In Class2
    6
    In Class2
    7
    In Class2
    8
    In Class4
    In Class2
    In Class3
    In Class1
    2
    In Class3
    0

    In Class2
    6
    In Class3
    18
    In Class2
    4
    In Class3
    0

     

    class

    In Class4
    In Class2
    In Class3
    In Class1
    5

    In Class2
    1
    In Class2
    2
    In Class2
    3
    In Class2
    4
    In Class2
    5

    In Class2
    6
    In Class2
    7
    In Class2
    8
    In Class4
    In Class2
    In Class3
    In Class1
    4_______11_______0

    In Class2
    6
    In Class3
    18
    In Class2
    4
    In Class2
    47

    # when method is overridden in both classes7

    class

    In Class4
    In Class2
    In Class3
    In Class1
    8

    In Class2
    1
    In Class2
    2
    In Class2
    3
    In Class2
    4
    In Class2
    5

    In Class2
    6
    In Class2
    7
    In Class2
    8
    In Class2
    46
    In Class2
    47

    In Class2
    6
    In Class3
    10
    In Class2
    4
    In Class3
    0

    In Class2
    6
    In Class3
    14
    In Class2
    4
    In Class3
    0

    # when method is overridden in both classes7

    In Class4
    In Class2
    In Class1
    In Class3
    In Class1
    2
    In Class4
    In Class2
    In Class1
    In Class3
    In Class1
    3
    In Class4
    In Class2
    In Class1
    In Class3
    In Class1
    4

    In Class4
    In Class2
    In Class1
    In Class3
    In Class1
    5

    đầu ra

    In Class4
    In Class2
    In Class1
    In Class3
    In Class1

    Đầu ra của đoạn mã trên có một vấn đề liên quan đến nó, phương thức m của Class1 được gọi hai lần. Python cung cấp giải pháp cho vấn đề trên với sự trợ giúp của hàm super[]. Hãy xem nó hoạt động như thế nào
     

    siêu chức năng

    Python3




    In Class3
    99

    In Class4
    In Class2
    In Class3
    In Class1
    00

     

    class

    In Class2
    0

    In Class2
    1
    In Class2
    2
    In Class2
    3
    In Class2
    4
    In Class2
    5

    In Class2
    6
    In Class2
    7
    In Class2
    8
    In Class2
    9_______11_______0

     

    class

    In Class3
    3

    In Class2
    1
    In Class2
    2
    In Class2
    3
    In Class2
    4
    In Class2
    5

    In Class2
    6
    In Class2
    7
    In Class2
    8
    In Class4
    In Class2
    In Class3
    In Class1
    2
    In Class3
    0

    In Class2
    6
    In Class4
    In Class2
    In Class3
    In Class1
    26
    In Class4
    In Class2
    In Class3
    In Class1
    27

     

    class

    In Class4
    In Class2
    In Class3
    In Class1
    5

    In Class2
    1
    In Class2
    2
    In Class2
    3
    In Class2
    4
    In Class2
    5

    In Class2
    6
    In Class2
    7
    In Class2
    8
    In Class4
    In Class2
    In Class3
    In Class1
    4_______11_______0

    In Class2
    6
    In Class4
    In Class2
    In Class3
    In Class1
    26
    In Class4
    In Class2
    In Class3
    In Class1
    27

     

    class

    In Class4
    In Class2
    In Class3
    In Class1
    8

    In Class2
    1
    In Class2
    2
    In Class2
    3
    In Class2
    4
    In Class2
    5

    In Class2
    6
    In Class2
    7
    In Class2
    8
    In Class2
    46
    In Class2
    47

    In Class2
    6
    In Class4
    In Class2
    In Class3
    In Class1
    26
    In Class4
    In Class2
    In Class3
    In Class1
    27

    # when method is overridden in both classes7

    In Class4
    In Class2
    In Class1
    In Class3
    In Class1
    2
    In Class4
    In Class2
    In Class1
    In Class3
    In Class1
    3
    In Class4
    In Class2
    In Class1
    In Class3
    In Class1
    4

    In Class4
    In Class2
    In Class1
    In Class3
    In Class1
    5

    đầu ra

    In Class4
    In Class2
    In Class3
    In Class1

    Super[] thường được sử dụng với chức năng __init__ khi khởi tạo phiên bản. Siêu chức năng đưa ra kết luận, phương thức nào sẽ gọi với sự trợ giúp của thứ tự giải quyết phương thức [MRO]
     

    Thứ tự giải phương pháp

    Trong Python, mọi lớp dù được tích hợp sẵn hay do người dùng định nghĩa đều được dẫn xuất từ ​​lớp đối tượng và tất cả các đối tượng đều là thể hiện của đối tượng lớp. Do đó, lớp đối tượng là lớp cơ sở cho tất cả các lớp khác
    Trong trường hợp đa thừa kế, một thuộc tính nhất định được tìm kiếm đầu tiên trong lớp hiện tại nếu không tìm thấy nó thì nó được tìm kiếm trong các lớp cha. Các lớp cha được tìm kiếm theo kiểu trái phải và mỗi lớp được tìm kiếm một lần
    Nếu chúng ta xem ví dụ trên thì thứ tự tìm kiếm các thuộc tính sẽ là Derived, Base1, Base2, object. Thứ tự được tuân theo được gọi là tuyến tính hóa của lớp Derived và thứ tự này được tìm ra bằng cách sử dụng một bộ quy tắc gọi là Thứ tự giải quyết phương pháp [MRO]
    Để xem MRO của một lớp.  
     

    • Sử dụng phương thức mro[], nó trả về một danh sách
      Ví dụ. lớp4. mro[]
    • Sử dụng thuộc tính _mro_, nó trả về một bộ
      Ví dụ. lớp4. __mro__
       

    Thí dụ.  

    Python3




    In Class3
    99

    In Class4
    In Class2
    In Class3
    In Class1
    00

     

    class

    In Class2
    0

    In Class2
    1
    In Class2
    2
    In Class2
    3
    In Class2
    4
    In Class2
    5

    In Class2
    6
    In Class2
    7
    In Class2
    8
    In Class2
    9_______11_______0

     

    class

    In Class3
    3

    In Class2
    1
    In Class2
    2
    In Class2
    3
    In Class2
    4
    In Class2
    5

    In Class2
    6
    In Class2
    7
    In Class2
    8
    In Class4
    In Class2
    In Class3
    In Class1
    2
    In Class3
    0

    In Class2
    6
    In Class4
    In Class2
    In Class3
    In Class1
    26
    In Class4
    In Class2
    In Class3
    In Class1
    27

     

    class

    In Class4
    In Class2
    In Class3
    In Class1
    5

    In Class2
    1
    In Class2
    2
    In Class2
    3
    In Class2
    4
    In Class2
    5

    In Class2
    6
    In Class2
    7
    In Class2
    8
    In Class4
    In Class2
    In Class3
    In Class1
    4_______11_______0

    In Class2
    6
    In Class4
    In Class2
    In Class3
    In Class1
    26
    In Class4
    In Class2
    In Class3
    In Class1
    27

     

    class

    In Class4
    In Class2
    In Class3
    In Class1
    8

    In Class2
    1
    In Class2
    2
    In Class2
    3
    In Class2
    4
    In Class2
    5

    In Class2
    6
    In Class2
    7
    In Class2
    8
    In Class2
    46
    In Class2
    47

    In Class2
    6
    In Class4
    In Class2
    In Class3
    In Class1
    26
    In Class4
    In Class2
    In Class3
    In Class1
    27

    # when method is overridden in both classes7

    In Class2
    7
    In Class4
    In Class2
    In Class3
    In Class1
    24
    In Class4
    In Class2
    In Class3
    In Class1
    25

    In Class2
    7
    In Class4
    In Class2
    In Class3
    In Class1
    27
    In Class4
    In Class2
    In Class3
    In Class1
    28

    đầu ra

    [, , , , ] 
    [, , , , ] 
     


    Ghi chú cá nhân của tôi arrow_drop_up

    Tiết kiệm

    Vui lòng Đăng nhập để nhận xét.

    PEP 484 là gì

    PEP 484 đã giới thiệu các gợi ý về loại — một cách để khiến Python có cảm giác được nhập tĩnh . Mặc dù gợi ý loại có thể giúp cấu trúc dự án của bạn tốt hơn, nhưng chúng chỉ có vậy — gợi ý — và theo mặc định không ảnh hưởng đến thời gian chạy.

    Đa kế thừa có được phép trong Python không?

    Có, Python hỗ trợ đa kế thừa . Giống như C++, một lớp có thể được bắt nguồn từ nhiều lớp cơ sở trong Python. Điều này được gọi là Đa kế thừa.

    Python giải quyết đa thừa kế như thế nào?

    Kế thừa là cơ chế để đạt được khả năng sử dụng lại mã vì một lớp [lớp con] có thể lấy thuộc tính của lớp khác [lớp cha]. It also provides transitivity ie. if class C inherits from P then all the sub-classes of C would also inherit from P.

    Gợi ý kiểu Python có được thực thi không?

    Gợi ý loại được thực hiện bằng chú thích Python [được giới thiệu từ PEP 3107]. Chúng được sử dụng để thêm kiểu cho biến, tham số, đối số hàm cũng như giá trị trả về, thuộc tính lớp và phương thức của chúng. Thêm gợi ý loại không có hiệu ứng thời gian chạy. đây chỉ là những gợi ý và không tự thực thi .

    Chủ Đề