Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Python

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.

Menguasai Warisan Berganda, Bertingkat, dan Urutan Resolusi Metode (MRO) Python

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.

Menguasai Warisan Berganda, Bertingkat, dan Urutan Resolusi Metode (MRO) Python

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:

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

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():

MultiDerived.__mro__ # (<class '__main__.MultiDerived'>, <class '__main__.Base1'>, <class '__main__.Base2'>, <class 'object'>)
MultiDerived.mro() # [<class '__main__.MultiDerived'>, <class '__main__.Base1'>, <class '__main__.Base2'>, <class 'object'>]

Graf warisan kompleks mengikuti prinsip yang sama. Pertimbangkan contoh ini:

Menguasai Warisan Berganda, Bertingkat, dan Urutan Resolusi Metode (MRO) 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
print(M.mro())
# Output:
# [, , , , , , ]

Untuk menelusuri lebih dalam algoritma yang menghitung MRO, konsultasikan dokumentasi resmi Python tentang class inheritance dan diskusi tentang MRO.

Python

  1. Menguasai Tipe Data Python: Panduan Praktis
  2. Menguasai Operator Python: Panduan Komprehensif
  3. Menguasai Pernyataan Pass Python: Panduan Praktis
  4. Menguasai Kamus Python: Pembuatan, Manipulasi, dan Teknik Lanjutan
  5. Menguasai Exception Kustom Python: Panduan Praktis
  6. Menguasai Pemrograman Berorientasi Objek Python: Kelas, Warisan, Enkapsulasi & Polimorfisme
  7. Menguasai Warisan Python: Konsep, Sintaks, dan Contoh Praktis
  8. Memahami type() dan isinstance() dalam Python: Contoh Praktis
  9. Menguasai Pewarisan C#: Membangun Kode yang Dapat Digunakan Lagi dan Dapat Diperbarui
  10. Pemrograman Berorientasi Objek Python: Panduan Lengkap