Python'da Nesne Yönelimli Programlama (OOP): Sınıflar ve Nesneler Rehberi

Yönetici
Python, nesne yönelimli programlamayı (Object-Oriented Programming - OOP) güçlü bir şekilde destekler. Bu paradigma, gerçek dünyadaki nesneleri modelleyerek kodunuzu daha organize, yeniden kullanılabilir ve bakım yapılabilir hale getirir. Bu makalede, sınıflar (classes), nesneler (objects), kalıtım (inheritance), kapsülleme (encapsulation) ve çok biçimlilik (polymorphism) gibi temel OOP kavramlarını inceleyeceğiz. Fonksiyonlar ve modülleri bildiğinizi varsayarak, bu içerikle profesyonel seviyeye yaklaşacaksınız.

Sınıf ve Nesne Nedir?​

  • Sınıf (Class): Bir nesnenin şablonu veya blueprint'idir. Özellikler (attributes) ve davranışlar (methods) tanımlar.
  • Nesne (Object): Sınıftan oluşturulan somut örneklerdir.
Basit bir sınıf örneği:

Kod:
class Araba:
def __init__(self, marka, model, yil):  # Constructor (yapıcı metod)
self.marka = marka
self.model = model
self.yil = yil
self.hiz = 0  # Başlangıç hızı

def hizlan(self, artis):
self.hiz += artis
print(f"{self.marka} {self.model} hızlandı! Yeni hız: {self.hiz} km/s")

def dur(self):
self.hiz = 0
print(f"{self.marka} {self.model} durdu.")

# Nesne oluşturma
araba1 = Araba("Toyota", "Corolla", 2022)
araba1.hizlan(60)  # Toyota Corolla hızlandı! Yeni hız: 60 km/s
araba1.dur()       # Toyota Corolla durdu.

__init__ metodu, nesne oluşturulduğunda otomatik çağrılır ve özellikleri başlatır. self parametresi, nesnenin kendisini temsil eder.

Kalıtım (Inheritance)​

Bir sınıf, başka bir sınıfın özelliklerini ve metodlarını miras alabilir. Bu, kod tekrarını önler.

Örnek: Elektrikli araç sınıfı, temel araba sınıfından türetelim.

Kod:
class ElektrikliAraba(Araba):  # Araba sınıfından kalıtım
def __init__(self, marka, model, yil, batarya_kapasitesi):
super().__init__(marka, model, yil)  # Üst sınıfın __init__'ini çağır
self.batarya_kapasitesi = batarya_kapasitesi

def sarj_et(self):
print(f"{self.marka} {self.model} şarj ediliyor... Batarya: {self.batarya_kapasitesi} kWh")

tesla = ElektrikliAraba("Tesla", "Model 3", 2023, 75)
tesla.hizlan(100)  # Miras alınan metod
tesla.sarj_et()    # Yeni metod

super() ile üst sınıf metodlarına erişim sağlanır.

Kapsülleme (Encapsulation)​

Özellikleri ve metodları gizleyerek (private) dış müdahaleyi kısıtlayın. Python'da tam private yok, ama konvansiyon olarak _ veya __ kullanılır.

Kod:
class Kisi:
def __init__(self, isim, yas):
self.__isim = isim  # Private (name mangling)
self.yas = yas      # Public

def get_isim(self):
return self.__isim

def set_isim(self, yeni_isim):
self.__isim = yeni_isim

ali = Kisi("Ali", 35)
print(ali.yas)          # 35
print(ali.get_isim())   # Ali
# print(ali.__isim)     # Hata verir!

Çok Biçimlilik (Polymorphism)​

Aynı isimdeki metodların farklı sınıflarda farklı davranması.

Örnek:

Kod:
def arac_bilgi(arac):
print(f"Marka: {arac.marka}, Model: {arac.model}")

arac_bilgi(araba1)
arac_bilgi(tesla)

Aynı fonksiyon, farklı sınıflardaki nesnelerle çalışır.

En İyi Uygulamalar ve İpuçları​

  • Sınıfları tek sorumluluğa odaklayın (Single Responsibility Principle).
  • __str__ metodu ile nesneyi okunaklı yazdırın:

    Kod:
    def __str__(self):
    return f"{self.marka} {self.model} ({self.yil})"

  • @property dekoratörü ile getter/setter'ları temiz hale getirin.
Yaygın hata: self parametresini unutmak – metodlarda mutlaka ekleyin.

Sonuç​

OOP, büyük ölçekli projelerde vazgeçilmezdir. Django, Flask gibi framework'ler bu prensiplere dayanır. Pratik için kendi sınıflarınızı oluşturun: Örneğin bir "Kitap" veya "Öğrenci" sınıfı. Forumumuzda OOP örneklerinizi paylaşabilir, diğer üyelerden geri bildirim alabilirsiniz. Erkag ekibi iyi çalışmalar diler...
 
Üst