DEV Community

Eydi
Eydi

Posted on

Python ile 5 Dakikada Nesneye Yönelik Programlama

Sınıflar sadece python'da değil diğer programlama dillerinde de işimizi oldukça kolaylaştıran yapılardır. Python'da oluşturduğumuz her int, str, list gibi yapılar aslında sınıf olarak oluşturulmaktadır. Temel olarak sınıflar birden fazla özelliği, metodu kendi içerisinde barındıran şablonlardır diyebiliriz.

  • Sınıf(class) oluşturma
class BenimSinif():
    ozellik1 = ""
    programlamaDili = "Python"
Enter fullscreen mode Exit fullscreen mode
  • Sınıftan örnek(instance) oluşturma
ornekOlustur = BenimSinif()

# örnek oluşturulan sinifin özelliğine
ornekOlustur.ozellik1 # şeklinde ulaşabiliriz.
Enter fullscreen mode Exit fullscreen mode
  • Sınıflarda kurucu(constructor) fonksiyon oluşturma

__init__ ile başlayan ifade aslında oluşturduğumuz örneklere(instance) göre özellikler tanımlamamız için gereklidir. İçerisinde self. ile sadece örneklere özgü özellikler tanımlayabiliyoruz.

class BenimSinifim():
    sinifOzelligi = [] # genel özellik
    def __init__(self):
        self.isim = ""
        self.bolum = ""

# sinifimizin özelliğine erişme
ornekSinif = BenimSinifim()
ornekSinif.isim = "Eydi" # şeklinde atama yapılabilir.

# genel özelliğe erişmek için
BenimSinifim.sinifOzelligi.append("Eydi") # şeklinde atama yapılabilir.
BenimSinifim.sinifOzelligi

# Not: Bu şekilde atama yapıldığında oluşturulan örneklerden(instance) 
# atama yapılmamış(varsayılan) olanlarda değiştirilebilir.
Enter fullscreen mode Exit fullscreen mode
  • Farklı bir metod oluşturarak atama yapma

Sınıflarda çoğu zaman enkapsülasyon yapmamız gerekiyor. Genel özelliklerin dışında, her oluşturulan örneğin(instance) metod ile kendine ait özelliklerini değiştiririz.

Not: _isim şeklinde yazılan değişkeni isim şeklinde de yazabilirdim. Aslında tanımlanan metoda ait yerel değişken oluyor. Çok fazla kafa karışıklığına yol açmamak için bu şekilde kullandım.

class BenimSinifim():
    def __init__(self):
        self.isim = ""
    def isimYazdir(self, _isim):
        self.isim = _isim

# oluşturduğumuz sınıftan örnek(instance) oluşturarak
ornekSinif = BenimSinifim()
ornekSinif.isimYazdir("Eydi")
ornekSinif.isim # denilerek ekran da kendi isminizi yazdırabilirsiniz.
Enter fullscreen mode Exit fullscreen mode
  • Kurucu(constructor) fonksiyon ile atama yapma

En başında örneği(instance) oluştururken tanımlama yapabiliriz.

class Calisanlar(): # miras alınmıyorsa parantez kullanmayabiliriz.
    def __init__(self, isim, soyIsim):
        self.isim = isim
        self.soyIsim = soyIsim

# şimdi instance(örnek) oluşturalım.
eydi = Calisanlar("eydi", "gözeneli")
eydi.isim # Çıktı da 'eydi' yazacaktır.
eydi.soyIsim # Sizde kendi isminizi deneyebilirsiniz.
Enter fullscreen mode Exit fullscreen mode
  • Kalıtım(Inheritance), Miras alma(Inherit)

Şöyle düşünelim: Ortak özelliklere sahip bir topluluğumuz var. Örneğin; bir üniversite de akademisyen ve öğrencilerden oluşan bir topluluk. Ortak özellikleri ve kendilerine ait özellikleri bulunacaktır. Böyle bir durumda her birini tek tek tanımlamak yerine ortak özellikler bir kere tanımlanır. Geriye kalan özellikler kendi içlerinde tanımlanır. Nedir bu ortak özellikler? İsim, yaş, vb. özelliklerden bahsedebiliriz. Kod örneğiyle açıklayalım.

class Kisiler():
    def __init__(self, isim, soyIsim):
        self.isim = isim
        self.soyIsim = soyIsim

class Akademisyen(Kisiler): # kalıtım alıyoruz
    def __init__(self, isim, soyIsim,bolum):
        super().__init__(isim, soyIsim) # üst sınıftaki kurucu metoddan
# önceki tanımlamalarımızı çekiyoruz
        self.bolum = bolum # bu sınıfa özgü özellik

class Ogrenci(Kisiler):
    def __init__(self, isim, soyIsim, sinif):
        super().__init__(isim, soyIsim) # super() Ogrenci sınıfı içinde
# kullanılıyor
        self.sinif = sinif

eydi = Akademisyen("eydi", "gözeneli", "mekatronik")
eydi.bolum
eydi.isim

esma = Ogrenci("esma", "gözeneli", "4. sinif")
esma.isim
esma.sinif
Enter fullscreen mode Exit fullscreen mode

Not: super().__init__(...) metodu ile üst sınıfımızdaki kurucu(constructor) fonksiyonumuzdaki eşitlikleri tekrar üstüne yazmamıza(override) gerek kalmadan sınıfımıza dahil ediyoruz.

Top comments (0)