Python Multiple Inheritance: Apa itu dan Bagaimana menggunakannya?

Dalam tutorial ini, anda akan belajar mengenai pelbagai warisan di Python dan cara menggunakannya dalam program anda. Anda juga akan belajar mengenai pewarisan pelbagai peringkat dan urutan penyelesaian kaedah.

Python Multiple Inheritance

Kelas boleh berasal dari lebih dari satu kelas asas di Python, serupa dengan C ++. Ini dipanggil warisan berganda.

Dalam pelbagai warisan, ciri semua kelas asas diwarisi ke dalam kelas turunan. Sintaks untuk warisan berganda serupa dengan warisan tunggal.

Contohnya

 class Base1: pass class Base2: pass class MultiDerived(Base1, Base2): pass

Di sini, kelas MultiDerived berasal dari kelas Base1 dan Base2.

Warisan Berganda di Python

Kelas MultiDerived mewarisi kedua-dua kelas Base1 dan Base2.

Python Multilevel Warisan

Kita juga boleh mewarisi dari kelas yang berasal. Ini dipanggil warisan bertingkat. Ini boleh menjadi kedalaman Python.

Dalam warisan bertingkat, ciri kelas asas dan kelas turunan diwarisi ke dalam kelas turunan baru.

Contoh dengan visualisasi yang sesuai diberikan di bawah.

 class Base: pass class Derived1(Base): pass class Derived2(Derived1): pass

Di sini, kelas Derived1 berasal dari kelas Base, dan kelas Derived2 berasal dari kelas Derived1.

Warisan bertingkat di Python

Perintah Penyelesaian Kaedah di Python

Setiap kelas di Python berasal dari objectkelas tersebut. Ia adalah jenis paling asas di Python.

Oleh itu secara teknikal, semua kelas lain, sama ada terbina dalam atau ditentukan pengguna, adalah kelas turunan dan semua objek adalah contoh objectkelas.

 # Output: True print(issubclass(list,object)) # Output: True print(isinstance(5.5,object)) # Output: True print(isinstance("Hello",object))

Dalam senario warisan berganda, atribut yang ditentukan dicari terlebih dahulu di kelas semasa. Sekiranya tidak dijumpai, carian diteruskan ke kelas induk secara mendalam, pertama, kiri-kanan tanpa mencari kelas yang sama dua kali.

Jadi, dalam contoh di atas MultiDerivedkelas perintah penggeledahan itu ( MultiDerived, Base1, Base2, object). Urutan ini juga disebut linearization of MultiDerivedclass dan set peraturan yang digunakan untuk mencari pesanan ini disebut Method Resolution Order (MRO) .

MRO mesti mengelakkan urutan keutamaan tempatan dan juga memberikan monotonik. Ini memastikan bahawa kelas selalu muncul di hadapan ibu bapa. Sekiranya terdapat banyak ibu bapa, pesanannya sama dengan tupel kelas asas.

MRO kelas boleh dilihat sebagai __mro__atribut atau mro()kaedah. Yang pertama mengembalikan tuple sementara yang kedua mengembalikan senarai.

 >>> MultiDerived.__mro__ (, , , ) >>> MultiDerived.mro() (, , , )

Berikut adalah contoh warisan berganda yang lebih kompleks dan visualisasinya bersama dengan MRO.

Memvisualisasikan Warisan Berganda di Python
 # Demonstration of MRO class X: pass class Y: pass class Z: pass class A(X, Y): pass class B(Y, Z): pass class M(B, A, Z): pass # Output: # (, , # , , # , , # ) print(M.mro())

Pengeluaran

 (,,,,,)

Untuk mengetahui algoritma sebenar bagaimana MRO dikira, lawati Perbincangan mengenai MRO.

Artikel menarik...