Erkag
Administrator
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.
__init__ metodu, nesne oluşturulduğunda otomatik çağrılır ve özellikleri başlatır. self parametresi, nesnenin kendisini temsil eder.
Örnek: Elektrikli araç sınıfı, temel araba sınıfından türetelim.
super() ile üst sınıf metodlarına erişim sağlanır.
Örnek:
Aynı fonksiyon, farklı sınıflardaki nesnelerle çalışır.
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.
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.