Python Sınıflar ve Nesneler

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.

Leave a Reply

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir