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"
- Sınıftan örnek(instance) oluşturma
ornekOlustur = BenimSinif()
# örnek oluşturulan sinifin özelliğine
ornekOlustur.ozellik1 # şeklinde ulaşabiliriz.
- 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.
- 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şkeniisim
ş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.
- 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.
- 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
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)