Menu
Coddy logo textTech

Ç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 singing

Kalı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.

challenge icon

Görev

Orta

Bu 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 - Device temel sınıfını uygulayın
  • internet.py - Internet temel sınıfını uygulayın
  • smartphone.py - Her iki temel sınıftan miras alan Smartphone sınıfını uygulayın
  • driver.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 metodu

Hangi 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österir

Kendin 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ın
quiz iconKendini test et

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