Python Kalıtım (Inheritance)

Kalıtım, bir sınıfın (alt sınıf) başka bir sınıfın (üst sınıf) özelliklerini ve metotlarını devralmasına olanak tanıyan bir mekanizmadır. Bu, kodun yeniden kullanılabilirliğini artırır ve daha düzenli bir yapı sağlar.


1. Kalıtımın Temel Kavramları

  • Üst Sınıf (Parent Class): Özellikleri ve metotları diğer sınıflara miras bırakan sınıftır.
  • Alt Sınıf (Child Class): Üst sınıfın özelliklerini ve metotlarını devralan sınıftır. Alt sınıf kendi özel özelliklerini ve metotlarını da ekleyebilir.

Temel Kalıtım Yapısı

class ÜstSınıf:
    def __init__(self, isim):
        self.isim = isim

    def konuş(self):
        print(f"{self.isim} konuşuyor.")

class AltSınıf(ÜstSınıf):
    def __init__(self, isim, yaş):
        super().__init__(isim)  # Üst sınıfın yapıcı metodunu çağırır
        self.yaş = yaş

    def bilgi_ver(self):
        print(f"{self.isim}, {self.yaş} yaşında.")

2. Kalıtımın Kullanımı

Örnek 1: Temel Kalıtım

class Hayvan:
    def __init__(self, isim):
        self.isim = isim

    def ses_ver(self):
        print(f"{self.isim} bir ses çıkardı.")

class Köpek(Hayvan):
    def ses_ver(self):
        print(f"{self.isim} havladı!")

class Kedi(Hayvan):
    def ses_ver(self):
        print(f"{self.isim} miyavladı!")

köpek = Köpek("Karabaş")
kedi = Kedi("Minnoş")

köpek.ses_ver()  # "Karabaş havladı!"
kedi.ses_ver()   # "Minnoş miyavladı!"

Örnek 2: Alt Sınıfa Yeni Özellik Ekleme

class Çalışan:
    def __init__(self, isim, maaş):
        self.isim = isim
        self.maaş = maaş

    def bilgi_ver(self):
        print(f"İsim: {self.isim}, Maaş: {self.maaş}")

class Yönetici(Çalışan):
    def __init__(self, isim, maaş, ekip):
        super().__init__(isim, maaş)
        self.ekip = ekip

    def ekip_bilgi(self):
        print(f"{self.isim} ekibinde {len(self.ekip)} kişi var.")

yönetici = Yönetici("Ahmet", 15000, ["Ali", "Ayşe", "Mehmet"])
yönetici.bilgi_ver()   # "İsim: Ahmet, Maaş: 15000"
yönetici.ekip_bilgi()  # "Ahmet ekibinde 3 kişi var."


3. super() Fonksiyonu

super() fonksiyonu, alt sınıfta üst sınıfın bir metodunu veya yapıcı metodunu çağırmak için kullanılır.

Örnek: super() ile Yapıcı Metot Kullanımı

class Araç:
    def __init__(self, marka):
        self.marka = marka

    def bilgi_ver(self):
        print(f"Araç markası: {self.marka}")

class Araba(Araç):
    def __init__(self, marka, model):
        super().__init__(marka)  # Üst sınıfın __init__ metodu çağrılır
        self.model = model

    def bilgi_ver(self):
        super().bilgi_ver()
        print(f"Model: {self.model}")

araba = Araba("Toyota", "Corolla")
araba.bilgi_ver()
# Çıktı:
# Araç markası: Toyota
# Model: Corolla

4. Çoklu Kalıtım

Python, bir sınıfın birden fazla sınıfı miras almasına izin verir. Ancak, karmaşık yapılar oluşturabileceği için dikkatli kullanılmalıdır.

Örnek: Çoklu Kalıtım

class Uçan:
    def uç(self):
        print("Uçabiliyorum!")

class Yüzen:
    def yüz(self):
        print("Yüzebiliyorum!")

class UçanBalık(Uçan, Yüzen):
    pass

uçan_balık = UçanBalık()
uçan_balık.uç()   # "Uçabiliyorum!"
uçan_balık.yüz()  # "Yüzebiliyorum!"

5. Özel Metotlar ve Kalıtım

__str__ ve __repr__ Metotları

Alt sınıflar, bu metotları özelleştirerek nesnelerin metin olarak nasıl temsil edileceğini belirleyebilir.

class İnsan:
    def __init__(self, isim, yaş):
        self.isim = isim
        self.yaş = yaş

    def __str__(self):
        return f"İsim: {self.isim}, Yaş: {self.yaş}"

class Öğrenci(İnsan):
    def __init__(self, isim, yaş, okul):
        super().__init__(isim, yaş)
        self.okul = okul

    def __str__(self):
        return super().__str__() + f", Okul: {self.okul}"

öğrenci = Öğrenci("Ali", 20, "Ankara Üniversitesi")
print(öğrenci)  # "İsim: Ali, Yaş: 20, Okul: Ankara Üniversitesi"

6. Örnek Sorular ve Çözümleri

Soru 1: Miras ile Hesaplama

Bir Dikdörtgen sınıfı oluşturun. Bu sınıftan miras alan bir Kare sınıfı tanımlayın ve alan hesaplama metodunu özelleştirin.

Çözüm:

class Dikdörtgen:
    def __init__(self, uzunluk, genişlik):
        self.uzunluk = uzunluk
        self.genislik = genişlik

    def alan(self):
        return self.uzunluk * self.genislik

class Kare(Dikdörtgen):
    def __init__(self, kenar):
        super().__init__(kenar, kenar)

dikdörtgen = Dikdörtgen(4, 5)
print(dikdörtgen.alan())  # 20

kare = Kare(4)
print(kare.alan())  # 16

Soru 2: Çoklu Kalıtımda Karışıklık

Bir Hayvan sınıfından türeyen bir Kuş ve bir Balık sınıfı oluşturun. Sonra bir Penguen sınıfı oluşturun ve doğru özellikleri kazandırın.

Çözüm:

class Hayvan:
    def hareket(self):
        print("Hareket ediyorum.")

class Kuş(Hayvan):
    def uç(self):
        print("Uçuyorum.")

class Balık(Hayvan):
    def yüz(self):
        print("Yüzüyorum.")

class Penguen(Balık):
    def yüz(self):
        print("Penguenler yüzebilir ama uçamaz!")

penguen = Penguen()
penguen.hareket()  # "Hareket ediyorum."
penguen.yüz()      # "Penguenler yüzebilir ama uçamaz!"

Sonuç

Kalıtım, Python’da kodunuzu daha düzenli ve modüler hale getirmenizi sağlar. Bu mekanizma sayesinde sınıflar arasındaki ortak davranışları paylaşabilir, alt sınıflara özel özellikler ekleyebilir ve programlarınızı daha okunabilir hale getirebilirsiniz.

Leave a Reply

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir