Urutan Resolusi Method
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Python di Coddy. Pelajaran 21 dari 64.
Method Resolution Order (MRO) adalah urutan yang digunakan Python untuk mencari method ketika beberapa class memiliki nama method yang sama.
Berikut contoh dengan beberapa class yang memiliki method yang sama:
class A:
def method(self):
return "Method from A"
class B:
def method(self):
return "Method from B"
class C(A, B):
passPeriksa MRO menggunakan __mro__:
print(C.__mro__)Output:
(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)Atribut __mro__ adalah tuple yang berisi semua class dalam urutan resolusi. Elemen pertama (__mro__[0]) selalu merupakan class itu sendiri (C), diikuti oleh class induk dari kiri ke kanan (A, lalu B), dan terakhir class object bawaan.
Buat sebuah object dan panggil method-nya:
c = C()
print(c.method())Output:
Method from APython menemukan method di class A terlebih dahulu (pada indeks 1 dalam MRO), jadi Python menggunakan method tersebut.
Ubah urutan pewarisan untuk melihat perbedaannya:
class D(B, A): # B sekarang berada sebelum A
pass
print(D.__mro__)
d = D()
print(d.method())Output:
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>)
Method from BSekarang Python menemukan method milik B lebih dulu karena B berada sebelum A dalam daftar pewarisan. Kamu bisa mengakses class tertentu dalam MRO menggunakan pengindeksan: D.__mro__[0] adalah D sendiri, D.__mro__[1] adalah B, dan D.__mro__[2] adalah A.
Kamu juga bisa menggunakan method mro():
print(C.mro())Meskipun mro() dan __mro__ memberikan urutan class yang sama, keduanya berbeda tipe: __mro__ mengembalikan tuple, sedangkan mro() mengembalikan list.
Poin penting: Python mencari method berdasarkan urutan MRO, class itu sendiri terlebih dahulu (indeks 0), lalu class induk dari kiri ke kanan sesuai urutan dalam definisi class (indeks 1, 2, dan seterusnya). Method pertama yang ditemukan akan digunakan.
Tantangan
SedangDalam tantangan ini, kamu akan mengimplementasikan hierarki class.
Kamu perlu mengedit file-file berikut:
device.py: Implementasikan class dasarDevicescreen.py: Implementasikan classScreenyang mewarisiDevicecomputer.py: Implementasikan classComputeryang mewarisiDevicelaptop.py: Implementasikan classLaptopdengan pewarisan bergandadriver.py- Implementasikan kasus uji yang akan memastikan implementasimu berfungsi dengan benar
Setiap file berisi komentar TODO terperinci yang akan memandumu langkah demi langkah dalam mengimplementasikannya.
Coba sendiri
# TODO: Impor semua class yang diperlukan
# from device import Device
# from screen import Screen
# from computer import Computer
# from laptop import Laptop
def explain_mro(class_name):
# TODO: Cetak MRO (Urutan Resolusi Method) untuk class yang diberikan
# TODO: Format: "MRO for [class name]:" (catatan: TIDAK ADA spasi setelah titik dua)
# TODO: Gunakan class_name.__name__ untuk mendapatkan nama class
# TODO: Gunakan class_name.__mro__ untuk mendapatkan tuple MRO
# TODO: Cetak setiap nama class dalam MRO pada baris terpisah
# TODO: Buat instance dari class tersebut
# TODO: Panggil power_on() pada instance tersebut dan simpan hasilnya
# TODO: Cetak: "Power on result: [result]"
# TODO: Cetak baris kosong agar lebih mudah dibaca
pass
# Uji kodemu
# TODO: Panggil explain_mro() dengan setiap class: Device, Screen, Computer, dan Laptop
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPclass vs objectParameter selfmethodAtributMethod Konstruktor (__init__)Rangkuman: Kalkulator Sederhana4Pewarisan
Pewarisan DasarFungsi super()Penimpaan MethodPewarisan BergandaUrutan Resolusi MethodRingkasan: Hierarki Karyawan5Polimorfisme
Meninjau Ulang Method OverridingDuck Typingclass dan method AbstrakDesain InterfaceRingkasan: Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi vs PewarisanMixinsMetode Statis dan Metode ClassDecorator ClassPengelola Konteks11Pola Desain Bagian 2
Pola PerintahPola AdapterPola DecoratorPola Template MethodPola StatePola Composite3Property class
Variabel instance vs variabel classDekorator propertyAtribut privatRangkuman: Pengelola Rekening Bank6Enkapsulasi
Anggota Public, Protected, PrivateModifier AksesPenyembunyian InformasiDecorator Property Tingkat LanjutUlasan: Sistem Catatan Siswa12Proyek: Manajemen Perpustakaan
Ikhtisar Proyekclass Buku dan PenggunaSistem PeminjamanFitur PencarianAntarmuka AdminPengujian dan IntegrasiLatihan sendiri: Compiler Python online