Çoklu Kalıtım
Coddy'nin Python Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 20 / 64.
Çoklu kalıtım, bir sınıfın birden fazla ebeveyn sınıftan kalıtım almasına olanak tanıyarak farklı kaynaklardan gelen işlevselliği birleştirir.
İşte iki ebeveyn sınıf:
class Animal:
def __init__(self, name):
self.name = name
def eat(self):
return f"{self.name} is eating"
class Flyable:
def fly(self):
return f"{self.name} is flying"Her iki ebeveynden de miras alan bir alt sınıf oluşturun:
class Bird(Animal, Flyable):
def __init__(self, name, species):
super().__init__(name) # Animal'ın __init__ metodunu çağırır
self.species = species
def sing(self):
return f"{self.name} is singing"class Bird(Animal, Flyable): söz dizimi, Bird sınıfının hem Animal hem de Flyable sınıflarından miras aldığı anlamına gelir.
Bir kuş nesnesi oluşturun ve her iki ebeveynden gelen metotları kullanın:
sparrow = Bird("Sparrow", "House sparrow")İlk ebeveyn sınıftan metotları çağırın:
print(sparrow.eat())İkinci üst sınıftan metotları çağırın:
print(sparrow.fly())Kuşun kendi metodunu çağırın:
print(sparrow.sing())Çıktı:
Sparrow is eating
Sparrow is flying
Sparrow is singingKalıtım sırasını kontrol edebilirsiniz:
print(Bird.__mro__) # Metot Çözümleme SırasıBu, metotlar aranırken hangi ebeveynin önce kontrol edildiğini gösterir.
Önemli Nokta: Çoklu kalıtım class Child(Parent1, Parent2): sözdizimini kullanır. Alt sınıf, tüm üst sınıflardan tüm metotları alır. Python, metotları ararken üst sınıfları soldan sağa doğru kontrol eder.
Görev
OrtaBu meydan okumada, akıllı telefonlarla çoklu kalıtımı (multiple inheritance) gösteren çok dosyalı bir sınıf sistemi uygulayacaksınız. Her sınıf, daha iyi kod organizasyonu için kendi dosyasında düzenlenmiştir.
Şu dosyaları düzenlemeniz gerekecek:
device.py-Devicetemel sınıfını uygulayıninternet.py-Internettemel sınıfını uygulayınsmartphone.py- Her iki temel sınıftan miras alanSmartphonesı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 ayrıntılı TODO yorumları içerir.
Kopya kağıdı
Çoklu kalıtım, bir sınıfın class Child(Parent1, Parent2): sözdizimini kullanarak birden fazla ebeveyn sınıftan miras almasına olanak tanır.
class Animal:
def __init__(self, name):
self.name = name
def eat(self):
return f"{self.name} is eating"
class Flyable:
def fly(self):
return f"{self.name} is flying"
class Bird(Animal, Flyable):
def __init__(self, name, species):
super().__init__(name) # Animal sınıfının __init__ metodunu çağırır
self.species = species
def sing(self):
return f"{self.name} is singing"Alt sınıf, tüm ebeveyn sınıflardan gelen tüm metotları miras alır:
sparrow = Bird("Sparrow", "House sparrow")
print(sparrow.eat()) # Animal sınıfından
print(sparrow.fly()) # Flyable sınıfından
print(sparrow.sing()) # Bird sınıfının kendi metoduHangi ebeveynin önce kontrol edildiğini görmek için Metot Çözümleme Sırasını (Method Resolution Order - MRO) kontrol edin:
print(Bird.__mro__) # Kalıtım sırasını gösterirKendin dene
# YAPILACAK: Smartphone sınıfını smartphone.py dosyasından içe aktarın
# Bir akıllı telefon oluşturun ve yöntemlerini test edin
# YAPILACAK: Markası "Apple" ve modeli "iPhone 13" olan bir Smartphone nesnesi oluşturun
my_phone = None
# YAPILACAK: Akıllı telefonun power_on() yöntemini çağırın ve yazdırın
# YAPILACAK: Akıllı telefonun connect() yöntemini çağırın ve yazdırın
# YAPILACAK: Akıllı telefonun make_call() yöntemini "123-456-7890" parametresiyle çağırın ve yazdırınBu 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ı