Menguasai Warisan Berganda, Bertingkat, dan Urutan Resolusi Metode (MRO) Python
Python Multiple Inheritance
Jelajahi bagaimana Python mendukung warisan berganda, nuansa warisan bertingkat, dan bagaimana method resolution order (MRO) mengatur pencarian atribut.
Python Multiple Inheritance
Python memungkinkan kelas untuk mewarisi dari lebih dari satu kelas induk, sama seperti C++. Fitur ini dikenal sebagai multiple inheritance dan memungkinkan kelas derived menggabungkan perilaku dari beberapa kelas induk.
Sintaksnya mirip dengan warisan tunggal: Anda mencantumkan semua kelas induk di dalam kurung, dipisahkan dengan koma.
Example
class Base1:
pass
class Base2:
pass
class MultiDerived(Base1, Base2):
pass
Dalam contoh ini, MultiDerived mewarisi atribut dan metode dari Base1 dan Base2.
Diagram: MultiDerived menerima fitur dari Base1 dan Base2.
Python Multilevel Inheritance
Di luar dua tingkat, Anda dapat merantai warisan: sebuah kelas mewarisi dari kelas derived, menciptakan hierarki multilevel inheritance. Python mendukung kedalaman apa pun.
Setiap kelas derived baru mewarisi dari induknya yang langsung, sambil juga membawa atribut leluhurnya.
Contoh:
class Base:
pass
class Derived1(Base):
pass
class Derived2(Derived1):
pass
Di sini, Derived1 memperluas Base, dan Derived2 memperluas Derived1 lebih lanjut, membentuk rantai tiga tingkat.
Method Resolution Order (MRO) in Python
Setiap kelas Python pada akhirnya mewarisi dari object, tipe dasar universal. Akibatnya, semua objek adalah instance dari object, baik bawaan maupun ditentukan pengguna:
Saat warisan berganda terlibat, Python menyelesaikan atribut menggunakan penelusuran depth-first, kiri-ke-kanan, tanpa mengunjungi kelas dua kali. Urutan penelusuran ini disebut Method Resolution Order (MRO) dan menjamin bahwa kelas muncul sebelum orang tuanya.
MRO untuk MultiDerived adalah: [MultiDerived, Base1, Base2, object]. Anda dapat melihatnya melalui atribut __mro__ atau metode mro():
Graf warisan kompleks mengikuti prinsip yang sama. Pertimbangkan contoh ini:
# 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
print(M.mro())
# Output:
# [, , , , , , ]
Untuk menelusuri lebih dalam algoritma yang menghitung MRO, konsultasikan dokumentasi resmi Python tentang class inheritance dan diskusi tentang MRO.