Python’da Kalıtım
Kalıtım, tüm işlevleri bir üst sınıftan alan ve daha fazlasını eklememize izin veren bir sınıf tanımlamamızı sağlar. Bu eğitimde Python’da kalıtımı kullanmayı öğreneceksiniz.
Kalıtım, nesne yönelimli programlamada güçlü bir özelliktir.
Mevcut bir sınıfta çok az değişiklikle veya hiç değişiklik yapmadan yeni bir sınıf tanımlamayı ifade eder. Yeni sınıf türetilmiş (veya alt) sınıf olarak adlandırılır ve miras aldığı sınıfa temel (veya ana) sınıf denir.
Python Kalıtım Sözdizimi
1 2 3 4 | class TemelSinif: # Temel sınıfın gövdesi class AltSinif(TemelSinif): # Türetilmiş sınıfın gövdesi |
Türetilmiş sınıf ile, yeni özellikler eklenebileceği gibi temel sınıftan özellikleri de devralır. Bu, kodun yeniden kullanılabilmesini sağlar.
Python’da Kalıtım Örneği
Kalıtımın kullanımını göstermek için bir örnek alalım.
Çokgen, 3 veya daha fazla kenarı olan kapalı bir şekildir. Diyelim ki aşağıdaki gibi tanımlanmış bir sınıfımız var.
1 2 3 4 5 6 7 8 9 10 11 | class Cokgen: def __init__(self, kenar_sayisi): self.n = kenar_sayisi self.kenarlar = [0 for i in range(kenar_sayisi)] def kenar_girdisi(self): self.kenarlar = [float(input(str(i+1) + ". kenar için uzunluk giriniz: ")) for i in range(self.n)] def kenarlari_goster(self): for i in range(self.n): print(str(i+1) + ". köşenin uzunluğu:" ,self.kenarlar[i]) |
Üçgen, 3 kenarı olan bir çokgendir. Üçgen çokgenin tüm özelliklerini taşır. Bu sayede Ucgen adında bir sınıf oluşturup Cokgen sınıfından miras alarak üçgene özel eklemeler yapabiliriz.
1 2 3 4 5 6 7 8 9 10 11 12 | class Ucgen(Cokgen): def __init__(self): Cokgen.__init__(self,3) def alani_hesapla(self): a, b, c = self.kenarlar s = (a + b + c) / 2 # Çevrenin yarısı alan = (s*(s-a)*(s-b)*(s-c)) ** 0.5 print('Üçgenin alanı: %0.2f' %alan) |
Ancak sınıfın üçgenin alanını bulmak ve yazdırmak için üçgenin alanını hesaplamak için Ucgen sınıfından yararlanabiliriz. Örnek:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | >>> ucgen = Ucgen() >>> ucgen.kenar_girdisi() 1. kenar için uzunluk giriniz: 3 2. kenar için uzunluk giriniz: 5 3. kenar için uzunluk giriniz: 4 >>> ucgen.kenarlari_goster() 1. köşenin uzunluğu: 3.0 2. köşenin uzunluğu: 5.0 3. köşenin uzunluğu: 4.0 >>> ucgen.alani_hesapla() Üçgenin alanı: 6.00 |
Gibi kenar_girdisi() veya kenarlari_goster() metodlarını tekrar tanımlamasak da kullanabildiğimizi görüyoruz.
Sınıfın kendisinde bir öznitelik bulunamazsa, arama temel sınıfa devam eder. Temel sınıfın kendisi diğer sınıflardan türetilmişse, bu özyinelemeli olarak tekrarlanır.