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.