0Pricing
Python Academy · Pelajaran

Pewarisan Ganda dan MRO

Pahami pewarisan ganda dan MRO Python (linierisasi C3).

Pewarisan Ganda dan MRO adalah pelajaran Python Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Python Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Python Academy mencakup 4 pelajaran total.

Pendahuluan

Python mendukung pewarisan berganda. Method Resolution Order (MRO) menentukan metode mana yang dipanggil saat terjadi benturan nama.

Sintaks Pewarisan Berganda

class C(A, B): mewarisi dari A dan B. C mendapatkan semua metode dari keduanya.
class A:
    def hello(self): return 'A'
class B:
    def world(self): return 'B'
class C(A, B): pass
c = C()
print(c.hello(), c.world())

Urutan Resolusi Metode (MRO)

MRO menentukan urutan pencarian. C.__mro__ menampilkan urutannya: C, A, B, object. Kelas pertama yang memiliki metode yang cocok akan digunakan.
class A:
    def greet(self): return 'A'
class B:
    def greet(self): return 'B'
class C(A, B): pass
print(C().greet())  # A wins
print(C.__mro__)

Linearisasi C3

Python menggunakan linearisasi C3 untuk menghitung MRO. Linearisasi ini menjamin: kelas turunan sebelum induk, dan urutan dari kiri ke kanan untuk beberapa kelas dasar.
class A: pass
class B(A): pass
class C(A): pass
class D(B, C): pass
print([c.__name__ for c in D.__mro__])

Pewarisan Berlian

D(B,C), ketika B dan C sama-sama mewarisi A, merupakan masalah berlian. C3 memastikan __init__ milik A hanya dipanggil satu kali.
class A:
    def __init__(self): print('A')
class B(A):
    def __init__(self): super().__init__(); print('B')
class C(A):
    def __init__(self): super().__init__(); print('C')
class D(B, C):
    def __init__(self): super().__init__(); print('D')
D()

Mixin

Mixin adalah kelas yang dirancang untuk pewarisan berganda. Mixin menambahkan metode tanpa berdiri sendiri sebagai kelas lengkap.
class JSONMixin:
    def to_json(self):
        import json
        return json.dumps(vars(self))
class User(JSONMixin):
    def __init__(self, name, age): self.name,self.age=name,age
print(User('Alice', 30).to_json())

Aturan Perancangan Mixin

Mixin sebaiknya: tidak memiliki __init__, tidak mewarisi kelas non-mixin, dan hanya melakukan satu hal. Beri nama dengan akhiran Mixin.
class LoggingMixin:
    def log(self, msg): print(f'[{self.__class__.__name__}] {msg}')
class Service(LoggingMixin):
    def run(self): self.log('running')
Service().run()

super() dalam Pewarisan Berganda

super() memanggil kelas berikutnya dalam MRO, yang belum tentu merupakan induk langsung. Setiap kelas harus memanggil super() agar perilaku kooperatif berjalan.
class Base:
    def action(self): return 'Base'
class A(Base):
    def action(self): return 'A->' + super().action()
class B(Base):
    def action(self): return 'B->' + super().action()
class C(A, B):
    def action(self): return 'C->' + super().action()
print(C().action())

type() untuk Pembuatan Kelas Dinamis

type('NewClass', (Base,), {'method': fn}) membuat kelas secara dinamis. Ini berguna untuk metaprogramming.
def hello(self): return 'hello'
MyClass = type('MyClass', (object,), {'hello': hello})
print(MyClass().hello())

Memeriksa MRO

ClassName.__mro__ atau inspect.getmro(ClassName) menampilkan urutan resolusi sebagai tupel kelas.
class A: pass
class B(A): pass
class C(B): pass
import inspect
print([c.__name__ for c in inspect.getmro(C)])

Kapan Menghindari Pewarisan Berganda

Hierarki pewarisan berganda yang kompleks sulit dipahami. Pilih komposisi atau mixin sederhana daripada hierarki yang dalam.
# Prefer:
class User:
    def __init__(self, name, logger):
        self.name = name
        self.logger = logger  # composition
print('composition preferred')

Pemeriksaan Singkat

Algoritma apa yang digunakan Python untuk menghitung Method Resolution Order?

Ringkasan

Pewarisan berganda: kelas C(A, B). MRO melalui linearisasi C3 menentukan pencarian metode. Gunakan mixin untuk pewarisan berganda yang rapi. super() mengikuti MRO.

Lanjutkan

Kemajuan Anda sangat baik! Lanjutkan untuk menguasai konsep berikutnya.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pewarisan Ganda dan MRO” gratis?

Ya — teks lengkap “Pewarisan Ganda dan MRO” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Python Academy, upgrade ke CoddyKit PRO. Kursus Python Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pewarisan Ganda dan MRO”?

Pahami pewarisan ganda dan MRO Python (linierisasi C3). Kamu berlatih Python Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Python Academy?

Tidak diperlukan pengalaman sebelumnya. Python Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Pewarisan Ganda dan MRO” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Python Academy ini?

Ya. Setiap pelajaran Python Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Pewarisan Tunggal
  2. Penggantian Method dan super()
  3. Pewarisan Ganda dan MRO
  4. Polimorfisme dan Duck Typing
← Kembali ke Python Academy