Menu
CoddyTech

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

Periksa 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 A

Python 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 B

Sekarang 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.

challenge icon

Tantangan

Sedang

Dalam tantangan ini, kamu akan mengimplementasikan hierarki class.

Kamu perlu mengedit file-file berikut:

  • device.py: Implementasikan class dasar Device
  • screen.py: Implementasikan class Screen yang mewarisi Device
  • computer.py: Implementasikan class Computer yang mewarisi Device
  • laptop.py: Implementasikan class Laptop dengan pewarisan berganda
  • driver.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
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Python online