Python’da sınıflar (classes), nesne tabanlı programlamanın temel taşıdır. Sınıflar, bir nesnenin özelliklerini (değişkenler) ve davranışlarını (metotlar) tanımlayan yapılardır. Nesneler ise sınıfların örnekleridir ve gerçek hayattaki varlıkların yazılım dünyasındaki karşılıklarıdır.
1. Sınıf Nedir?
Sınıf, bir nesnenin şablonudur. Örneğin, bir Araba
sınıfı düşünün. Bu sınıfın markası, modeli ve rengi gibi özellikleri; çalıştırma, durdurma gibi davranışları olabilir.
Sınıf Tanımlama
Bir sınıf, class
anahtar kelimesi ile tanımlanır:
class Araba:
marka = "Toyota" # Özellik (Attribute)
model = "Corolla"
yıl = 2022
def çalıştır(self): # Davranış (Method)
print(f"{self.marka} {self.model} çalıştırıldı.")
2. Nesne Nedir?
Bir sınıftan oluşturulan örnektir. Her nesne, sınıfın özelliklerine ve metotlarına sahiptir.
Nesne Oluşturma
araba1 = Araba() # Araba sınıfından bir nesne oluşturuldu
print(araba1.marka) # "Toyota" yazdırılır
araba1.çalıştır() # "Toyota Corolla çalıştırıldı." yazdırılır
3. Yapıcı Metot (__init__
)
Sınıfın her nesnesi oluşturulduğunda otomatik olarak çalışan özel bir metottur. Genellikle nesnenin özelliklerini başlatmak için kullanılır.
Yapıcı Metot Kullanımı
class Araba:
def __init__(self, marka, model, yıl):
self.marka = marka # Nesne özelliği
self.model = model
self.yıl = yıl
def çalıştır(self):
print(f"{self.marka} {self.model} çalıştırıldı.")
# Nesne oluşturma
araba1 = Araba("Honda", "Civic", 2023)
print(araba1.marka) # "Honda" yazdırılır
araba1.çalıştır() # "Honda Civic çalıştırıldı." yazdırılır
4. Sınıf ve Nesne Özellikleri
Sınıf Özellikleri
Sınıfa ait özellikler tüm nesneler tarafından paylaşılır.
class Araba:
tekerlek_sayısı = 4 # Sınıf özelliği
araba1 = Araba()
araba2 = Araba()
print(araba1.tekerlek_sayısı) # 4
print(araba2.tekerlek_sayısı) # 4
Nesne Özellikleri
Her nesneye özel özelliklerdir.
class Araba:
def __init__(self, marka):
self.marka = marka # Nesne özelliği
araba1 = Araba("Toyota")
araba2 = Araba("Ford")
print(araba1.marka) # "Toyota"
print(araba2.marka) # "Ford"
5. Metotlar
Normal Metotlar
Nesneye özgü işlemler için kullanılır.
class Araba:
def __init__(self, marka):
self.marka = marka
def çalıştır(self):
print(f"{self.marka} çalıştırıldı.")
araba1 = Araba("Hyundai")
araba1.çalıştır() # "Hyundai çalıştırıldı."
Sınıf Metotları
Sınıf seviyesinde işlem yapmak için @classmethod
kullanılır.
class Araba:
tekerlek_sayısı = 4
@classmethod
def bilgi_ver(cls):
print(f"Bir araba {cls.tekerlek_sayısı} tekerleklidir.")
Araba.bilgi_ver() # "Bir araba 4 tekerleklidir." yazdırılır
Statik Metotlar
Sınıf ya da nesneye bağlı olmayan genel işlemler için kullanılır.
class Araba:
@staticmethod
def hız_hesapla(mesafe, zaman):
return mesafe / zaman
print(Araba.hız_hesapla(100, 2)) # 50.0
6. Miras (Inheritance)
Bir sınıf, başka bir sınıfın özelliklerini ve metotlarını miras alabilir.
Miras Örneği
class Araba:
def __init__(self, marka):
self.marka = marka
def çalıştır(self):
print(f"{self.marka} çalıştırıldı.")
class ElektrikliAraba(Araba):
def __init__(self, marka, batarya_kapasitesi):
super().__init__(marka)
self.batarya_kapasitesi = batarya_kapasitesi
def şarj_et(self):
print(f"{self.marka} şarj ediliyor...")
tesla = ElektrikliAraba("Tesla", 100)
tesla.çalıştır() # "Tesla çalıştırıldı."
tesla.şarj_et() # "Tesla şarj ediliyor..."
7. Örnekler
Örnek 1: Öğrenci Sınıfı
class Ogrenci:
def __init__(self, isim, not_ortalamasi):
self.isim = isim
self.not_ortalamasi = not_ortalamasi
def bilgi_ver(self):
print(f"{self.isim}, not ortalaması: {self.not_ortalamasi}")
ogrenci1 = Ogrenci("Ahmet", 85)
ogrenci1.bilgi_ver()
Örnek 2: Basit ATM Sınıfı
class ATM:
def __init__(self, bakiye):
self.bakiye = bakiye
def para_cek(self, miktar):
if miktar <= self.bakiye:
self.bakiye -= miktar
print(f"{miktar} TL çekildi. Kalan bakiye: {self.bakiye} TL")
else:
print("Yetersiz bakiye!")
def para_yatir(self, miktar):
self.bakiye += miktar
print(f"{miktar} TL yatırıldı. Güncel bakiye: {self.bakiye} TL")
hesap = ATM(1000)
hesap.para_cek(300)
hesap.para_yatir(500)
Sonuç
Python’da sınıflar ve nesneler, yazılımı daha düzenli, modüler ve yeniden kullanılabilir hale getirir. Bu yapılar, gerçek dünya varlıklarını programlama dünyasına taşımak için güçlü bir araçtır. Örnekleri inceleyerek ve uygulamalar yaparak, bu konudaki yetkinliğinizi artırabilirsiniz.