Metot Çözümleme Sırası
Coddy'nin Python Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 21 / 64.
Method Resolution Order (MRO), birden fazla sınıf aynı method adına sahip olduğunda Python'ın metotları aramak için kullandığı sıradır.
İşte aynı metoda sahip birden fazla sınıfın bulunduğu bir örnek:
class A:
def method(self):
return "Method from A"
class B:
def method(self):
return "Method from B"
class C(A, B):
pass__mro__ kullanarak MRO'yu kontrol edin:
print(C.__mro__)Output:
(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)__mro__ özniteliği, çözünürlük sırasındaki tüm sınıfları içeren bir demettir (tuple). İlk eleman (__mro__[0]) her zaman sınıfın kendisidir (C), ardından soldan sağa doğru üst sınıflar (önce A, sonra B) ve son olarak yerleşik object sınıfı gelir.
Bir nesne oluşturun ve yöntemi çağırın:
c = C()
print(c.method())Çıktı:
Method from APython, yöntemi ilk olarak A sınıfında buldu (MRO'daki 1. dizinde), bu yüzden onu kullandı.
Aradaki farkı görmek için kalıtım sırasını değiştirin:
class D(B, A): # B artık A'dan önce geliyor
pass
print(D.__mro__)
d = D()
print(d.method())Output:
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>)
Method from BŞimdi Python B'nin metodunu ilk sırada bulur çünkü kalıtım listesinde B, A'dan önce gelir. MRO içindeki belirli sınıflara indeksleme kullanarak erişebilirsiniz - D.__mro__[0] D'nin kendisidir, D.__mro__[1] B'dir ve D.__mro__[2] A'dır.
Ayrıca mro() metodunu da kullanabilirsiniz:
print(C.mro())mro() ve __mro__ aynı sınıf sırasını sağlasa da tür açısından farklılık gösterirler: __mro__ bir tuple döndürürken, mro() bir list döndürür.
Key Point: Python, metotları MRO sırasında arar - önce sınıfın kendisi (indeks 0), ardından sınıf tanımında listelendiği soldan sağa doğru üst sınıflar (indeksler 1, 2, vb.). Bulunan ilk metot kullanılır.
Görev
OrtaBu görevde bir sınıf hiyerarşisi uygulayacaksınız.
Şu dosyaları düzenlemeniz gerekecek:
device.py: TemelDevicesınıfını uygulayınscreen.py:Devicesınıfından türeyenScreensınıfını uygulayıncomputer.py:Devicesınıfından türeyenComputersınıfını uygulayınlaptop.py: Çoklu kalıtım (multiple inheritance) içerenLaptopsınıfını uygulayındriver.py- Uygulamanızın doğru çalıştığını doğrulayacak test durumlarını uygulayın
Her dosya, uygulama boyunca size adım adım rehberlik edecek detaylı TODO yorumları içerir.
Kendin dene
# TODO: Tüm gerekli sınıfları içe aktar
# from device import Device
# from screen import Screen
# from computer import Computer
# from laptop import Laptop
def explain_mro(class_name):
# TODO: Verilen sınıf için MRO'yu (Method Resolution Order) yazdır
# TODO: Biçim: "MRO for [class name]:" (not: iki nokta üst üsteden sonra BOŞLUK YOK)
# TODO: Sınıfın adını almak için class_name.__name__ kullan
# TODO: MRO demetini almak için class_name.__mro__ kullan
# TODO: MRO'daki her sınıf adını ayrı satırlara yazdır
# TODO: Sınıfın bir örneğini oluştur
# TODO: Örnek üzerinde power_on() çağır ve sonucu sakla
# TODO: Print: "Power on result: [result]"
# TODO: Daha iyi okunabilirlik için boş bir satır yazdır
pass
# Kodunu test et
# TODO: explain_mro() fonksiyonunu her sınıfla çağır: Device, Screen, Computer ve Laptop
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Object Oriented Programming bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesnelerself ParametresiMetotlarÖzniteliklerYapıcı Metot (__init__)Özet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımsuper() FonksiyonuMetot Geçersiz KılmaÇoklu KalıtımMetot Çözümleme SırasıÖzet - Çalışan Hiyerarşisi7Özel Metotlar
Sihirli Metotlara GirişOperatör Aşırı YüklemeKapsayıcı Sihirli MetotlarıÖzet - Özel Liste10Tasarım Kalıpları Bölüm 1
Tasarım kalıplarına girişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı13Final Meydan Okumaları
E-öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi5Çok Biçimlilik (Polymorphism)
Metot Geçersiz Kılmaya Yeniden BakışDuck TypingSoyut Sınıflar ve MetotlarArayüz TasarımıÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kompozisyon ve KalıtımMixinsStatik ve Sınıf MetotlarıSınıf DekoratörleriBağlam Yöneticileri11Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit Kalıbı