Press "Enter" to skip to content

Python Kalıtım Inheritance

Yaşar SAFALI 0

Python Kalıtım Inheritance

Bu yazımızda Nesne Yönelimli Programlama‘nın temel ilkelerinden biri olan Kalıtım (Inheritance) konusuna değineceğiz. Python Kalıtım Inheritance, sınıfların başka bir sınıftan miras alması demektir.Bu miras alma içerisinde o sınıfın özellikleri,tanımlanmış metotları yer alır.Günümüzdeki kalıtım ile aynı mantıkta çalışır.Çocuğun anne veya babadan kalıtım alması gibi.

Kalıtımda miras alınan sınıf temel sınıftır.Miras alan sınıf ise alt sınıf olarak tanımlanır.

Programcılar bir uygulama geliştirirken farklı farklı sınıflar için aynı özellikleri,metotları tanımlamak zorunda kalabilirler.Inheritance bu noktada programcıların işini kolaylaştırıp tekrarı önler.Örneğin bir Mühendis sınıfınız olsun ve bu sınıfın üyelerinin adı,soyadı,maaşı gibi özellikleri olduğunu düşünün.Bir diğer sınıfınız da Bilgisayar Mühendisleri sınıfı olsun.Bu sınıfın üyelerininde adı,soyadı,maaşı gibi özellikleri olsun.Aynı mantıkla Makine Mühendisleri,İnşaat Mühendisleri gibi sınıflarınızında olduğunu düşünelim.Bütün bu özellikleri her sınıf için oluşturmanız gerekecektir.Buda programcının aynı kodu defalarca yazması demektir.İşte inheritance bu noktada şöyle bir çözüm üretir.

Ortak olan özellikleri Mühendis sınıfında tanımla,diğer  sınıfların kendine ait özelliklerini ise kendi sınıflarında tasarla.Son olarak diğer sınıflar Mühendis sınıfından kalıtım alsın.Mühendis sınıfının özelliklerini,metotlarını kullanabilsin.

Burada miras alınan temel sınıf Mühendisler,miras alan alt sınıflar ise Bilgisayar Mühendisleri,Makine Mühendisleri,İnşaat Mühendisleri gibi.

Şimdi söz olarak ifade ettiklerimizi koda dökelim.

class Muhendisler:

    def __init__(self,isim,soyisim,maas):
        self.isim=isim
        self.soyisim=soyisim
        self.maas=maas


    def BilgileriYaz(self):
        print(self.isim)
        print(self.soyisim)
        print(self.maas)

Mühendisler Sınıfımızı oluşturduk.Diğer sınıflarda ortak olmasını düşündüğümüz özellikleri ve fonksiyonları bu sınıfın içerisine yerleştirdik.

Şimdi Bilgisayar Mühendisleri ve Makine Mühendisleri sınıfımızı oluşturalım.

class BilgisayarMuhendisleri(Muhendisler):

    pass
class MakineMuhendisleri(Muhendisler):
    pass

Sınıflara şimdilik herhangi bir özellik veya fonksiyon eklemedik.Şimdi biraz syntax incelemesi yapalım.Python’da inheritance uygulanırken temel sınıfın ismi Alt sınıflara parametre şeklinde verilir.Şimdi bilgisayar mühendisleri sınıfından bir nesne türetelim.Bakalım mühendisler sınıfından kalıtım gerçekleşmiş mi?

class Muhendisler:

    def __init__(self,isim,soyisim,maas):
        self.isim=isim
        self.soyisim=soyisim
        self.maas=maas


    def BilgileriYaz(self):
        print(self.isim)
        print(self.soyisim)
        print(self.maas)

class BilgisayarMuhendisleri(Muhendisler):

    pass
class MakineMuhendisleri(Muhendisler):
    pass

bilmuh=BilgisayarMuhendisleri("yaşar","safalı",4000)
print(bilmuh.isim)
bilmuh.BilgileriYaz()

Output:

yaşar
yaşar
safalı
4000

Evet Mühendisler Sınıfından kalıtım alınmış.O sınıfa ait özellikleri ve fonksiyonları artık kullanabiliyoruz.

Overriding(iptal etme)

Overriding temel sınıftan miras alınan bir fonksiyonun aynı isimle miras alan alt sınıfta tekrar oluşturulmasıdır.Artık temel sınıftaki fonksiyon değil alt sınıfta tanımladığımız fonksiyon çalışacaktır.

class Muhendisler:

    def __init__(self,isim,soyisim,maas):
        self.isim=isim
        self.soyisim=soyisim
        self.maas=maas


    def BilgileriYaz(self):
        print(self.isim)
        print(self.soyisim)
        print(self.maas)

class BilgisayarMuhendisleri(Muhendisler):

    def BilgileriYaz(self):
        print(self.isim)
        print("Bilgisayar Mühendisleri sınıfındaki Override edilen Fonksiyon Çalıştı")

class MakineMuhendisleri(Muhendisler):
    def BilgileriYaz(self):
        print(self.isim)
        print("Makine Mühendisleri sınıfındaki Override edilen Fonksiyon Çalıştı")

bilmuh=BilgisayarMuhendisleri("yaşar","safalı",4000)
bilmuh.BilgileriYaz()
makinemuh=MakineMuhendisleri("ahmet","akın",3900)
makinemuh.BilgileriYaz()

Output:

yaşar
Bilgisayar Mühendisleri sınıfındaki Override edilen Fonksiyon Çalıştı
ahmet
Makine Mühendisleri sınıfındaki Override edilen Fonksiyon Çalıştı

Görüldüğü gibi temel sınıftan miras alınan  fonksiyon değil tekrar tanımlanan(override edilen) fonksiyon çalıştı.

Peki temel sınıftaki fonksiyonun içeriğini tamamen değiştirmek değilde üzerine ekleme yapmak istersek ne olacak?Bunun içinde Inheritance da yer alan super() deyimini kullanacağız.

super()

Super anahtar kelimesi Inheritance konusunda çok kullanılan bir ifadedir.Bu ifade temel sınıfta tanımlanan bir fonksiyonun içeriğine ekleme yapmaya yarar.Yani temel sınıftaki fonksiyonun çalışmasını sağlar.

Şimdi yukarıda yaptığımız override işlemini super() ifadesi ile tekrar yapalım.

from builtins import super


class Muhendisler:

    def __init__(self,isim,soyisim,maas):
        self.isim=isim
        self.soyisim=soyisim
        self.maas=maas


    def BilgileriYaz(self):
        print(self.isim)
        print(self.soyisim)
        print(self.maas)

class BilgisayarMuhendisleri(Muhendisler):

    def BilgileriYaz(self):
        super().BilgileriYaz()
        print("Bilgisayar Mühendisleri sınıfındaki Override edilen Fonksiyon Çalıştı")

class MakineMuhendisleri(Muhendisler):
    def BilgileriYaz(self):
        super().BilgileriYaz()
        print("Makine Mühendisleri sınıfındaki Override edilen Fonksiyon Çalıştı")

bilmuh=BilgisayarMuhendisleri("yaşar","safalı",4000)
bilmuh.BilgileriYaz()
makinemuh=MakineMuhendisleri("ahmet","akın",3900)
makinemuh.BilgileriYaz()

 

Output:

yaşar
safalı
4000
Bilgisayar Mühendisleri sınıfındaki Override edilen Fonksiyon Çalıştı

ahmet
akın
3900
Makine Mühendisleri sınıfındaki Override edilen Fonksiyon Çalıştı

Kalıtım alan alt sınıfların kendilerine ait metotları ve özellikleri olabilir.

from builtins import super


class Muhendisler:

    def __init__(self,isim,soyisim,maas):
        self.isim=isim
        self.soyisim=soyisim
        self.maas=maas


    def BilgileriYaz(self):
        print(self.isim)
        print(self.soyisim)
        print(self.maas)

class BilgisayarMuhendisleri(Muhendisler):

    def __init__(self,isim,soyisim,maas,unvan):
        super().__init__(isim,soyisim,maas)
        self.unvan=unvan

    def BilgileriYaz(self):
        print("Bilgisayar Mühendisleri sınıfındaki Override edilen Metot Çalıştı")
    def unvanyaz(self):
        print(self.unvan)

class MakineMuhendisleri(Muhendisler):

    def __init__(self,isim,soyisim,maas,birim):
        super().__init__(isim,soyisim,maas)
        self.birim=birim
    def BilgileriYaz(self):
        print("Makine Mühendisleri sınıfındaki Override edilen Metot Çalıştı")
    def birimyaz(self):
        print(self.birim)
bilmuh=BilgisayarMuhendisleri("yaşar","safalı",4000,"Kıdemli Mühendis")
bilmuh.unvanyaz()
makinemuh=MakineMuhendisleri("ahmet","akın",3900,"Isı")
makinemuh.birimyaz()

Output:

Kıdemli Mühendis
Isı

 

 

Python Kalıtım Inheritance ile ilgili anlatacaklarımız bu kadar.Bir sonraki yazımızda görüşmek dileğiyle.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir