CodeBlanks Logo Icon CodeBlanks

Çoklu miras

Çoklu mirası ve MRO'yu öğrenirsin.

Çoklu miras

Çoklu miras (multiple inheritance), bir sınıfın birden fazla ebeveynden miras almasıdır. Ebeveynler parantez içinde virgülle ayrılır.

Örnek: class C(A, B): pass. Burada C hem A hem B'den miras alır. Her iki ebeveynin metotları C örneğinde kullanılabilir. Aynı isimli metot varsa MRO sırası belirler.

MRO sırası

MRO (Method Resolution Order), Python'ın ebeveynleri arama sırasıdır. Çoklu mirasta soldan sağa doğru aranır. C.mro() ile sırayı görebilirsin.

Örnek: class C(A, B) için MRO [C, A, B, object] olur. Yani c.hello() önce C'de, sonra A'da, sonra B'de aranır. Elmas (diamond) kalıtımında C3 linearization tutarlı bir sıra üretir.

Uygulama Çoklu miraslı C sınıfı

A sınıfını tanımla; def hello(self): ve gövdede print("A") yaz. B sınıfını tanımla; def hello(self): ve gövdede print("B") yaz. Sonra class C(A, B): pass tanımla. c = C() ile örnek oluştur ve c.hello() çağrısı yap.

Başlangıç kodu

main.py
# A, B ve C sınıflarını tanımla

Örnek çözüm

main.py
# A, B ve C sınıflarını tanımla
class A:
    def hello(self):
        print("A")

class B:
    def hello(self):
        print("B")

class C(A, B):
    pass

c = C()
c.hello()

Beklenen çıktı

A

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Hangisi çoklu miras tanımıdır?

  • class C: pass
  • class C(A, B): pass Doğru cevap
  • class C extends A, B: pass
  • class C(A): pass

Açıklama: Virgülle ayrılmış iki ebeveyn çoklu mirası gösterir.

2 Çoklu miras tanımını tamamla

Soru
class C(A, ____):
    pass
Cevap
class C(A, B):
    pass

Açıklama: İkinci ebeveyn de virgülle eklenir.

3 Çoklu miras kavramlarını eşle

Kavram Anlamı
class C(A, B) Çoklu miras
C.mro() Arama sırası
A, B Virgülle ebeveynler

Orta seviye bölümündeki tüm dersler