Python Sınıflar/Nesneler
Python, nesne tabanlı bir programlama dilidir. Python'da neredeyse her şey bir sınıftır.
Bir sınıf (class), kendisinden örnek oluşturulabilen bir nesnedir (object). Bu sınıflara özellik ve yöntemler atanabilir.
Bir Sınıf Oluşturmak
Sınıf oluşturmak için class ifadesi kullanılır. Bu ifadeden sonra sınıfın adına yer verilir ve iki nokta üst üste kullanılarak sınıf yapısı yazılmaya başlanır:
PYTHON Kodu
class Sinifim:
x = 5
Yukarıdaki örnekte Sinifim adında ve tek özellikli (x) bir sınıf oluşturulmuştur.
Sınıfın Bir Örneğini (Nesne) Oluşturmak
Yukarıdaki örnekte bir sınıf tanımladık. Peki bu sınıfı nasıl nesne olarak oluşturup kullanacağız? Bunun için aşağıdaki örneği inceleyin:
PYTHON Kodu
class Sinifim:
x = 5
p1 = Sinifim()
print(p1.x);
Örnek kodu incelediğimizde, nesne yaratırken sınıf adını ve sonrasında parantez aç-kapat yapıyoruz.
__init__() Fonksiyonu
Bundan önceki örnekler bir sınıfın temel bileşenleriydi. Şimdi bahsedilecek olan __init__() fonksiyonu ise sınıfın temel bileşenidir. Nesne oluşturulduğunda ilk olarak bu fonksiyon çalıştırılır.
PYTHON Kodu
class Kisi:
def __init__(self, isim, yas):
self.isim = isim
self.yas = yas
p1 = Kisi("Murat", 36)
print(p1.isim)
print(p1.yas)
Yukarıdaki örnekte def __init__(self, isim, yas): sınıfın yapıcı fonksiyonudur. Burada belirtilen isim ve yas değişkenleri, sınıfın bir örneği oluşturulurken kullanılan değişkenlerdir.
Nesne Yöntemleri/Metotları
Nesneler için sınıfa özgü yöntemler/metotlar geliştirilebilir. Nesne yaratıldıktan sonra bu yöntemler .yontemAdi() şeklinde çalıştırılabilir.
PYTHON Kodu
class Kisi:
def __init__(self, isim, yas):
self.isim = isim
self.yas = yas
def yazdir(self):
print("Merhaba, adım ", self.isim, ", yaşım ", self.yas);
p1 = Kisi("Murat", 36)
p1.yazdir()
NOT: Yukarıdaki örneklerde geçen self, sınıfın kendisini ifade eden bir parametre olup nesneye ait özellik ve yöntemlerle işlem yaparken kullanılır. İstenilirse bunun yerine farklı adlandırmalar yapılabilir. Ancak __init__() ve yöntemlerde kullanılması zorunludur. Aşağıdaki örnekte önce kendisi, sonradan da kisi şeklinde adlandırılıp kullanılmıştır:
PYTHON Kodu
class Kisi:
def __init__(kendisi, isim, yas):
kendisi.isim = isim
kendisi.yas = yas
def yazdir(kisi):
print("Merhaba, adım ", kisi.isim, ", yaşım ", kisi.yas);
p1 = Kisi("Murat", 36)
p1.yazdir()
Nesne Özelliklerini Değiştirmek
Nesne özelliğinden sonra eşittir yazılarak yeni değer ifade edilebilir:
PYTHON Kodu
class Kisi:
def __init__(self, isim, yas):
self.isim = isim
self.yas = yas
p1 = Kisi("Murat", 36)
p1.yas = 40
print(p1.yas)
Nesnenin Bir Özelliğini Ya Da Nesneyi Silmek
Bunun için del ifadesi kullanılabilir:
PYTHON Kodu
kisi = new Kisi("Murat", 36)
del kisi.yas # yas özelliğini siler
del kisi # nesneyi tamamen siler
pass İfadesi
Sınıflar boş olamaz. En azından tek bir satırlık kod beklerler. Bu nedenle eğer hiçbir kod yazılmayacaksa sınıftan sonra pass yazılmalıdır.
Python Alt Sınıflar
Python'da bir sınıfın benzer özelliklere sahip alt sınıfları oluşturulabilir. Miras alma (inheritance) olarak bilinen bu yöntemle, örnek alınan sınıfa ait tüm özellikler ve yöntemler yeni tanımlanan sınıfta da bulunur.
PYTHON Kodu
class Kisi:
def __init__(self, isim, yas):
self.isim = isim
self.yas = yas
class Ogrenci(Kisi):
pass
p1 = Ogrenci("Murat", 36)
print(p1.yas)
Yukarıdaki örnekte Ogrenci isimli bir sınıf oluşturulmuş ve bu sınıfın Kisi sınıfının alt sınıfı olduğu sınıfın sol tarafında parantez içinde sınıf adı yazılarak belirtilmiştir.
__init__() Fonksiyonunu Kullanmak
Bir önceki dersimizde bu fonksiyonun sınıfların temel yapıcı fonksiyonu olduğundan bahsetmiştik. Yeni bir nesne yaratıldığında öncelikle çalıştırılırlar. Alt sınıflarda da bu fonksiyon kullanılabilir. Ancak kullanılırsa miras aldığı sınıfa ait __init__() fonksiyonu geçersiz olacaktır.
PYTHON Kodu
class Kisi:
def __init__(self, isim, yas):
self.isim = isim
self.yas = yas
class Ogrenci(Kisi):
def __init__(self, isim, sinif):
self.isim = isim
self.sinif = sinif
p1 = Ogrenci("Murat", "9/A")
print(p1.sinif)
Yukarıdaki örnekte Ogrenci sınıfı içindeki yas özelliğini kaldırarak sınıf özelliği ekledik ve ekrana yazdırdık. Eğer örnek aldığı sınıfa ait __init__() fonksiyonunun da geçerli olmasını istiyorsak aşağıdaki kodu kullanabiliriz:
PYTHON Kodu
class Kisi:
def __init__(self, isim, yas):
self.isim = isim
self.yas = yas
class Ogrenci(Kisi):
def __init__(self, isim, yas, sinif):
Kisi.__init__(self, isim, yas)
self.sinif = sinif
p1 = Ogrenci("Murat", 36, "9/A")
print(p1.sinif)
Alt sınıfın __init__() fonksiyonunda yer vereceğimiz .__init__(...), önceki sınıfa ait isim ve yas özelliklerinin de Ogrenci sınıfı için kullanılmasını sağlamıştır.
Yukarıda örneği alınan sınıfın adını yazmak yerine super() fonksiyonu kullanılabilir. Yani yukarıdaki örnek için super().__init__(self, isim, yas) şeklinde kullanım da doğrudur.
UYARI: Alt sınıflarda kullandığınız fonksiyon/yöntem ya da özellikler her zaman miras aldığı sınıfın özelliklerini gölgeleyecek ve üstüne yazacaktır.
PYTHON Kodu
class Kisi:
def __init__(self, isim, yas):
self.isim = isim
self.yas = yas
def yazdir(self):
print("Hoş geldin", self.isim)
class Ogrenci(Kisi):
def __init__(self, isim, yas, sinif):
Kisi.__init__(self, isim, yas)
self.sinif = sinif
def yazdir(self):
print("Hoş geldin, sevgili öğrencimiz", self.isim)
p1 = Ogrenci("Murat", 36, "9/A")
p1.yazdir()
Kaynak