15- Sınıflar
Nesne tabanlı programlamanın temel elemanı sınıf yapısı açıklanmıştır.
Python’da sınıflar (classes) ve nesneler (objects), Nesne Yönelimli Programlama’nın (OOP) temel yapı taşlarıdır. Sınıflar, nesnelerin nasıl davranacağını ve hangi özelliklere sahip olacağını tanımlayan şablonlardır. Nesneler ise, sınıflardan oluşturulan bireysel örneklerdir.
1. Sınıf (Class) Nedir?
Sınıf, bir varlığın özelliklerini (niteliklerini) ve bu varlıkla ilişkili işlemleri (metodları) tanımlayan bir yapıdır. Bir sınıfın içinde, bir nesnenin hangi özelliklere ve davranışlara sahip olacağını tanımlayabilirsiniz.
Sınıf tanımlama:
1
2
3
4
5
6
class Araba:
marka = "Toyota"
model = "Corolla"
def calistir(self):
print(f"{self.marka} {self.model} çalışıyor.")
Bu sınıf Araba
, bir arabanın marka ve model bilgilerini ve arabayı çalıştırmak için bir işlevi içerir.
2. Nesne (Object) Nedir?
Nesne, bir sınıfın örneğidir. Sınıfta tanımlanan özelliklere ve işlevlere sahip gerçek bir varlıktır. Bir sınıftan birçok farklı nesne oluşturulabilir.
Sınıftan nesne oluşturma:
1
2
3
4
5
6
# Araba sınıfından bir nesne oluşturuyoruz
benim_arabam = Araba()
# Nesne üzerinden sınıfın özelliklerine ve metodlarına erişiyoruz
print(benim_arabam.marka) # Çıktı: Toyota
benim_arabam.calistir() # Çıktı: Toyota Corolla çalışıyor.
Yukarıdaki örnekte, Araba
sınıfından bir benim_arabam
nesnesi oluşturulmuş ve bu nesnenin özelliklerine (marka
, model
) ve işlevine (calistir
) erişilmiştir.
3. __init__
Metodu ile Özelleştirilmiş Nesneler
Sınıflara, her nesnenin farklı özelliklere sahip olmasını sağlamak için __init__
metodu eklenir. Bu metod, bir nesne oluşturulduğunda otomatik olarak çalışır ve nesnenin ilk değerlerini belirler.
Örnek:
1
2
3
4
5
6
7
class Araba:
def __init__(self, marka, model):
self.marka = marka
self.model = model
def calistir(self):
print(f"{self.marka} {self.model} çalışıyor.")
Bu sınıf, her araba için marka ve model bilgisini özelleştirebileceğimiz bir yapı sunuyor.
Nesne oluşturma:
1
2
3
4
5
6
7
# İki farklı nesne oluşturuyoruz
araba1 = Araba("Toyota", "Corolla")
araba2 = Araba("Honda", "Civic")
# Nesnelerle çalışıyoruz
araba1.calistir() # Çıktı: Toyota Corolla çalışıyor.
araba2.calistir() # Çıktı: Honda Civic çalışıyor.
4. Sınıflara Yeni Metodlar Ekleme
Bir sınıfa istediğimiz kadar metod ekleyebiliriz. Bu metodlar, nesneler üzerinde çalışacak işlevlerdir.
Örnek:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Araba:
def __init__(self, marka, model, hiz=0):
self.marka = marka
self.model = model
self.hiz = hiz
def calistir(self):
print(f"{self.marka} {self.model} çalışıyor.")
def hizlan(self, miktar):
self.hiz += miktar
print(f"{self.marka} {self.model} hızlanıyor. Hız: {self.hiz} km/h")
def fren_yap(self):
self.hiz = 0
print(f"{self.marka} {self.model} durdu.")
Nesne oluşturma ve metod çağırma:
1
2
3
4
araba1 = Araba("Toyota", "Corolla")
araba1.calistir() # Çıktı: Toyota Corolla çalışıyor.
araba1.hizlan(50) # Çıktı: Toyota Corolla hızlanıyor. Hız: 50 km/h
araba1.fren_yap() # Çıktı: Toyota Corolla durdu.
Bu örnekte, Araba
sınıfına hızlanma (hizlan
) ve fren yapma (fren_yap
) metodları ekledik. Her metod, nesnenin durumunu (hızını) değiştirebilir.
5. Nesneler Arası Farklılık ve Bağımsızlık
Her nesne, kendi verilerine ve durumuna sahiptir. Aynı sınıftan türeyen iki nesne birbirinden bağımsızdır.
Örnek:
1
2
3
4
5
6
7
8
araba1 = Araba("Toyota", "Corolla", 0)
araba2 = Araba("Honda", "Civic", 0)
araba1.hizlan(60) # Çıktı: Toyota Corolla hızlanıyor. Hız: 60 km/h
araba2.hizlan(80) # Çıktı: Honda Civic hızlanıyor. Hız: 80 km/h
print(araba1.hiz) # Çıktı: 60
print(araba2.hiz) # Çıktı: 80
Bu örnekte araba1
ve araba2
nesneleri birbirinden bağımsızdır. Bir nesnenin hızını değiştirmek, diğer nesnenin hızını etkilemez.
6. Kalıtım (Inheritance) ile Sınıfları Genişletme
Python’da sınıflar başka sınıflardan miras alabilir. Bu, kalıtım (inheritance) olarak bilinir. Yeni bir sınıf tanımlarken, var olan bir sınıfın özelliklerini ve metodlarını miras alabiliriz.
Örnek:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Arac:
def __init__(self, marka, model):
self.marka = marka
self.model = model
def calistir(self):
print(f"{self.marka} {self.model} çalışıyor.")
# Araba sınıfı Arac sınıfından miras alıyor
class Araba(Arac):
def __init__(self, marka, model, kapilar):
super().__init__(marka, model) # Üst sınıfın (Arac) __init__ metodunu çağırıyoruz
self.kapilar = kapilar
def kapilari_goster(self):
print(f"{self.marka} {self.model} {self.kapilar} kapıya sahip.")
Nesne oluşturma:
1
2
3
araba1 = Araba("Toyota", "Corolla", 4)
araba1.calistir() # Çıktı: Toyota Corolla çalışıyor.
araba1.kapilari_goster() # Çıktı: Toyota Corolla 4 kapıya sahip.
Bu örnekte Araba
sınıfı, Arac
sınıfından miras alıyor. Yani Araba
sınıfı, Arac
sınıfındaki calistir
metodunu kullanabilir ve ayrıca kendine özgü metodlar ekleyebilir.
7. Sonuç
- Sınıf (class), bir varlığın özelliklerini ve davranışlarını tanımlayan bir şablondur.
- Nesne (object), bir sınıfın bireysel örneğidir.
- Sınıflar sayesinde, tekrar kullanılabilir ve modüler kod yazılabilir.
- Sınıflara metodlar ekleyerek nesnelerin belirli işlevleri yerine getirmesini sağlayabiliriz.
- Kalıtım sayesinde sınıflar arası ilişki kurabilir, özellik ve davranışları paylaşabiliriz.
Nesne yönelimli programlama (OOP), sınıflar ve nesneler üzerinden daha düzenli, modüler ve yönetilebilir kod yazmamıza olanak tanır.