Nesne yönelimli programlamada python kalıtım inheritance mekanizması, tekrar eden kodu ortadan kaldırır. Bir üst sınıf (parent/base) ortak özellikleri ve metotları barındırır; alt sınıf (child) bunları miras alır ve üzerine ekler. **Neden kalıtım kullanılır?** Birden fazla sınıfın paylaştığı özellikler tek bir yerde tanımlanır. Değişiklik yapmak gerektiğinde yalnızca üst sınıfı güncellersiniz. **Adım 1, Üst sınıfı yazın** ```python class Hayvan: def __init__(self, isim, yas): self.isim = isim self.yas = yas def tanitici(self): return f"{self.isim}, {self.yas} yaşında" ``` **Adım 2, Alt sınıfı oluşturun** Python kalıtım inheritance için parantez içine üst sınıf adını yazın: ```python class Kopek(Hayvan): def __init__(self, isim, yas, irk): super().__init__(isim, yas) # üst sınıf __init__ çağrılır self.irk = irk def ses_cikar(self): return "Hav!" ``` `super()` çağrısı üst sınıfın `__init__`'ini tetikler, `isim` ve `yas` değerleri oraya aktarılır. **Adım 3, Miras alınan metotları kullanın** ```python karakas = Kopek("Karakaş", 3, "Kangal") print(karakas.tanitici()) # Üst sınıftan miras alındı print(karakas.ses_cikar()) # Alt sınıfa özgü ``` **Adım 4, Metot geçersiz kılma (override)** Alt sınıf, üst sınıftaki metodu aynı adla yeniden tanımlarsa kendi versiyonu çalışır: ```python class Kedi(Hayvan): def tanitici(self): # override return f"Kedi: {self.isim}" ``` **Adım 5, isinstance() ile tip kontrolü** ```python print(isinstance(karakas, Kopek)) # True print(isinstance(karakas, Hayvan)) # True, kalıtım zinciri print(isinstance(karakas, Kedi)) # False ``` **Adım 6, Çok düzeyli kalıtım** Alt sınıfın da alt sınıfı olabilir. Ancak üç düzeyin ötesi karmaşıklık yaratır, bu noktada kompozisyon (bir sınıfın başka bir sınıfı içermesi) daha iyi bir seçenek olabilir. **Yaygın hatalar** - `super().__init__()` çağırmayı unutmak, üst sınıfın özellikleri atanmaz - Tüm sınıflara kalıtım uygulamak, "IS-A" ilişkisi yoksa kalıtım değil, kompozisyon kullanın - Metot adı çakışmalarını fark etmemek, override mi oluyor, yeni metot mu?