Python'da Nesne Tabanlı Programlama - Inheritance/Kalıtım

by trustix


Eklenme Tarihi : 22 Aralık 2020 18:15 Views:     770



Python'da OOP - Inheritance - Kalıtım

Bir programlama dilinin Nesne Tabanlı Programlama dili olması için dört farklı konsepti ya da kavramı içerisinde barındırması gerekmektedir.

Bu kavramlar Encapsulation, Inheritance, Polymorphism ve Abstraction'dur. Bu içeriğimizde bu kavramlardan Inheritance/Kalıtım kavramını incelemeye çalışacağız. Inheritance/Kalıtım ya da diğer adıyla miras alma. Kavramın isimlendirmesinden anlaşılacağı üzeri bir miras alma olayı gerçekleşmektedir. Bu miras alma kavramı Class yapıları arasında gerçekleşmektedir. Temel olarak bir Class yapısının özelliklerinin bir diğer Class'a kalıtım yoluyla alınması işlemidir. Bu durumda her iki class yapısı da benzer özelliklere sahip olacaktır. Bu noktada iki farklı kavram daha durumun içerisine girmektedir. Miras alınan sınıf yani Parent class ve miras alan sınıf yani child class. Class yapısından özellikler miras alınabileceği gibi o class yapısındaki metotlar da miras alınabilir. Bu tür miras alma işlemleri Python Nesne Tabanlı Programlama'da Inherintance olarak adlandırılır. Bu noktada  Inheritance kavramı da kendi içerisinde iki farklı türe ayrılmaktadır. Bunlar Single Inheritance/Tekli Kalıtım ve Multi Inheritance/Çoklu Kalıtım kavramlarıdır. Nesne yönelimli programlama dillerinde bazıları Tekli Kalıtımı bazıları ise Çoklu Kalıtımı destekler. Henüz tartışma sürecinde olsa da Java'nın çoklu kalıtımı desteklemediği düşünülmektedir. Ancak C++ ve Python Çoklu Kalıtımı desteklemektedir. Bunlar haricinde bir child class bir parent class'ında bütün özellik ve metotları miras alabileceği gibi kendi içerisinde benzersiz özelliklere de sahip olabilir.

Python'da Inherintance Kavramının Avantajları

  • Bir kodun yeniden kullanılabilirliğinin sağlanması ve bu durumun stabilize edilmesi
  • Reel dünya ilişkilerinin iyi temsil edilmesi
  • Geçişli olması

Gerekli açıklamaları yaptıktan sonra örnekler üzerinden Inheritance kavramına bakalım.

 

Parent Class Oluşturma

# Python'da Nesne Tabanlı Programlama
# Inheritance/Kalıtım
# Parent Class Oluşturma

"""
    Kalıtım kavramında en az iki farklı
    class yapısının olması gerektiğinden
    bahsetmiştik. Bunlardan biri
    miras alınan sınıf yani parent class
    diğeri ise miras alan yani child class
    yapısı idi. Öncelikle Kisi adında bir class
    tanımlıyoruz. Bu class parent class olarak değerlendirilebilir.
    Çünkü üst bir class'tır. Ve bu sınıfın özellikleri
    tür olarak bütün insanlarda mevcuttur.
"""


class Kisi:
  def __init__(self, isim, yas, kg, cinsiyet):
    self.isim = isim
    self.yas = yas
    self.kg = kg
    self.cinsiyet = cinsiyet

  def goster(self):
    print(self.isim, self.yas, self.kg, self.cinsiyet)

k_1 = Kisi('Kerem', 18, 65, 'E')
k_1.goster()

"""
    Output:
        Kerem 18 65 E
"""
  
 

 

Child Class Oluşturma

# Python'da Nesne Tabanlı Programlama
# Inheritance/Kalıtım
# Child Class Oluşturma


"""
    Parent class'ından sonra Ogrenci
    adında bir tane child classı oluşturuyoruz.
    Daha sonra oluşturduğumuz bu child classına
    bağımsız değişken olarak
    parent class'ını gönderiyoruz.
    Bu sayede hem parent classındaki bütün
    özellikleri hem de metotları miras almış
    oluyoruz. Burada görüldüğü gibi Ogrenci
    class'ına hem isim, yaş gibi özellikler
    hem de daha önce tanımlamış olduğumuz goster
    metodu kalıtım yolu ile geçmiş oldu.
"""


class Kisi:
  def __init__(self, isim, yas, kg, cinsiyet):
    self.isim = isim
    self.yas = yas
    self.kg = kg
    self.cinsiyet = cinsiyet

  def goster(self):
    print(self.isim, self.yas, self.kg, self.cinsiyet)


class Ogrenci(Kisi):
  pass

"""
    Buradaki pass anahtar kelimesi child sınıfına başka
    özellik veya metot eklemek istemediğimiz zaman
    kullanabileceğimiz bir anahtar kelimedir.
    Eğer benzersiz özellikler eklemek istersek
    bu durumda __init__() fonksiyonunu kullanmamız 
    gerekecektir.
"""


o_1 = Ogrenci('Eray', 15, 53, 'E')

o_1.goster()
# Output: Eray 15 53 E
  

 

Eğer parent classından __init__() fonksiyonu miras almak istemiyorsak bu durumda child classında ayrıca __init__() fonksiyonunu kullanmamız gerekecektir.

Örneğin:

# Python'da Nesne Tabanlı Programlama
# Inheritance/Kalıtım
# Child Class Oluşturma


"""
    Child classında __init__() fonksiyonu kullandığımız
    için parent classındaki __init__() özelliklerini
    kalıtım yolu ile almamış olduk. Ancak bu
    durumda diğer metotları yine kalıtım yolu ile
    alabiliriz.
"""


class Kisi:
  def __init__(self, isim, yas, kg, cinsiyet):
    self.isim = isim
    self.yas = yas
    self.kg = kg
    self.cinsiyet = cinsiyet

  def goster(self):
    print(self.isim, self.yas, self.kg, self.cinsiyet)

  def mesaj(self):
      print('Merhaba Sayın Seyirciler')


class Ogrenci(Kisi):
  def __init__(self, no, sinif):
      self.no = no
      self.sinif = sinif

  def goster(self):
      print(self.no, self.sinif)



"""
    Parent classında mesaj adında bir metot tanımladık
    ve bu metodu child classı olan Ogrenci'de
    kullandık.
"""

o_1 = Ogrenci('11546', '5-A Sınıfı')
o_1.goster() # Output: 11546 5-A Sınıfı
o_1.mesaj() # Output: Merhaba Sayın Seyirciler


  

 





0

Yorum Formu

vikikod.com    © 2019