Python'da Class (Sınıf), nesne yönelimli programlamanın temel yapı taşıdır. Bir sınıf, nesneler için bir şablon veya kalıptır. Nesneler (objects), bu şablona göre yaratılır ve sınıfın belirlediği özelliklere (attributes) ve davranışlara (methods) sahip olurlar.
Python Sınıfının Temel Yapısı
Bir sınıf tanımlamak için Python'da class
anahtar kelimesi kullanılır. Örnek bir sınıf yapısı şu şekildedir:
class Araba:
def __init__(self, model, renk): # Yapıcı metot (constructor)
self.model = model # Nesne özelliği (attribute)
self.renk = renk # Nesne özelliği (attribute)
def hizlan(self): # Metot (davranış)
print(f"{self.model} hızlanıyor!")
Parçalarına Ayıralım:
-
Sınıf Tanımı (Class Definition):
-
class
anahtar kelimesiyle başlar. - Sınıfın adı büyük harfle başlamalıdır, bu Python'da yaygın bir stil kuralıdır.
class Araba: ...
-
-
Yapıcı Metot (init):
-
__init__
metodu, Python'da bir sınıftan yeni bir nesne oluşturulduğunda otomatik olarak çalışan özel bir metottur. - Bu metodun içinde sınıfın özellikleri (örneğin
model
verenk
) atanır. -
self
parametresi, sınıfın mevcut örneğini temsil eder. Nesneye özgü özelliklere ve metotlara erişim sağlar.
def __init__(self, model, renk): self.model = model # Nesneye özellik atıyoruz self.renk = renk # Nesneye özellik atıyoruz
-
-
Özellikler (Attributes):
- Sınıfın her örneğinin (nesnesinin) sahip olduğu veriler veya değişkenlerdir.
- Yukarıdaki örnekte,
model
verenk
birAraba
nesnesinin özellikleridir.
-
Metotlar (Methods):
- Sınıf içindeki fonksiyonlardır. Nesnenin bir davranışını tanımlar.
- Örneğin,
hizlan
metodu,Araba
nesnesinin hızlanma davranışını tanımlar.
def hizlan(self): print(f"{self.model} hızlanıyor!")
Sınıfı Kullanma
Bir sınıftan nesne (object) oluşturmak için sınıfın adını bir fonksiyon gibi kullanırız:
araba1 = Araba("Toyota", "Kırmızı") # Araba sınıfından bir nesne oluşturduk
araba2 = Araba("Honda", "Mavi")
print(araba1.model) # Toyota
print(araba2.renk) # Mavi
araba1.hizlan() # Toyota hızlanıyor!
Özel Metotlar (Dunder Methods)
Python'da iki alt çizgi ile başlayan ve biten özel metotlar vardır. __init__
gibi. Bunlar dunder methods (double underscore) olarak da bilinir. Bir sınıfa zengin özellikler kazandırmak için kullanılırlar. Örneğin:
-
__str__(self)
: Sınıfın bir metne dönüştürüldüğünde nasıl görüneceğini tanımlar. -
__len__(self)
: Sınıfın uzunluğunu belirlemek için kullanılır (örneğin liste gibi nesneler için).
class Araba:
def __init__(self, model, renk):
self.model = model
self.renk = renk
def __str__(self):
return f"Araba modeli: {self.model}, rengi: {self.renk}"
araba = Araba("Tesla", "Beyaz")
print(araba) # Araba modeli: Tesla, rengi: Beyaz
Kapsülleme (Encapsulation)
Sınıf içinde değişkenlerin doğrudan dışarıdan erişimini sınırlandırmak için genellikle kapsülleme kullanılır. Değişkenleri özel (private) hale getirmek için __
ile başlatabiliriz.
class Kisi:
def __init__(self, isim, yas):
self.isim = isim
self.__yas = yas # Özel değişken
def yas_getir(self):
return self.__yas # Özel değişkene erişim için bir metot
kisi1 = Kisi("Ahmet", 25)
print(kisi1.yas_getir()) # 25
Kalıtım (Inheritance)
Bir sınıf başka bir sınıftan miras alarak, o sınıfın özelliklerini ve metotlarını kullanabilir.
class Araba:
def __init__(self, model):
self.model = model
def bilgi(self):
print(f"Bu bir {self.model}.")
class ElektrikliAraba(Araba): # Araba sınıfından miras alıyor
def __init__(self, model, pil_kapasitesi):
super().__init__(model)
self.pil_kapasitesi = pil_kapasitesi
def bilgi(self):
super().bilgi()
print(f"Pil kapasitesi: {self.pil_kapasitesi} kWh")
tesla = ElektrikliAraba("Tesla Model S", 100)
tesla.bilgi()
Sonuç
Python'da sınıflar, nesne yönelimli programlamanın temelini oluşturur ve yazılımın modüler, okunabilir ve genişletilebilir olmasını sağlar. Sınıflar, veriyi ve o veriye ait işlevleri bir araya getirerek, kodun daha düzenli ve yeniden kullanılabilir olmasına yardımcı olur.