Python Multiple Inheritance: Apa itu dan Bagaimana Cara Menggunakannya?

Dalam tutorial ini, Anda akan belajar tentang multiple inheritance dengan Python dan bagaimana menggunakannya dalam program Anda. Anda juga akan belajar tentang pewarisan multi-level dan urutan resolusi metode.

Python Multiple Inheritance

Sebuah kelas dapat diturunkan dari lebih dari satu kelas dasar dengan Python, mirip dengan C ++. Ini disebut warisan berganda.

Dalam multiple inheritance, fitur dari semua kelas dasar diwarisi ke dalam kelas turunan. Sintaks untuk multiple inheritance mirip dengan single inheritance.

Contoh

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

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

Beberapa Warisan dengan Python

Kelas MultiDerived mewarisi dari kelas Base1 dan Base2.

Warisan Multilevel Python

Kita juga bisa mewarisi dari kelas turunan. Ini disebut pewarisan bertingkat. Ini bisa menjadi kedalaman berapa pun dengan Python.

Dalam pewarisan bertingkat, fitur kelas dasar dan kelas turunan diwarisi ke dalam kelas turunan baru.

Contoh dengan visualisasi yang sesuai diberikan di bawah ini.

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

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

Warisan Bertingkat dengan Python

Metode Resolusi Urutan dengan Python

Setiap kelas dalam Python diturunkan dari objectkelas tersebut. Ini adalah tipe paling dasar dalam Python.

Jadi secara teknis, semua kelas lain, baik bawaan atau yang ditentukan pengguna, adalah kelas turunan dan semua objek adalah instance objectkelas.

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

Dalam skenario multiple inheritance, setiap atribut tertentu dicari terlebih dahulu di kelas saat ini. Jika tidak ditemukan, pencarian dilanjutkan ke kelas induk secara mendalam-pertama, gaya kiri-kanan tanpa mencari kelas yang sama dua kali.

Jadi, dalam contoh di atas dari MultiDerivedkelas urutan pencarian ( MultiDerived, Base1, Base2, object). Urutan ini juga disebut linierisasi MultiDerivedkelas dan sekumpulan aturan yang digunakan untuk menemukan urutan ini disebut Method Resolution Order (MRO) .

MRO harus mencegah pemesanan prioritas lokal dan juga memberikan monotonisitas. Ini memastikan bahwa kelas selalu muncul di hadapan orang tuanya. Dalam kasus banyak orang tua, urutannya sama dengan tupel kelas dasar.

MRO kelas dapat dilihat sebagai __mro__atribut atau mro()metode. Yang pertama mengembalikan tupel sedangkan yang terakhir mengembalikan daftar.

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

Berikut adalah contoh multiple inheritance yang sedikit lebih kompleks dan visualisasinya bersama dengan MRO.

Memvisualisasikan Banyak Warisan dengan 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())

Keluaran

 (,,,,,,)

Untuk mengetahui algoritma sebenarnya tentang bagaimana MRO dihitung, kunjungi Diskusi di MRO.

Artikel yang menarik...