Python 3'te Sınıflar Nasıl Oluşturulur ve Nesneler Nasıl Tanımlanır
Giriş
Python, nesne yönelimli bir programlama dilidir. Nesne yönelimli programlama (Object-Oriented Programming - OOP), açıkça sıralanmış talimatlara odaklanan prosedürel programlamanın aksine, yeniden kullanılabilir kod kalıpları oluşturmaya odaklanır. Özellikle karmaşık programlar üzerinde çalışırken, nesne yönelimli programlama kodunuzu yeniden kullanmanıza ve daha okunabilir yazmanıza olanak tanır; bu da kodun daha sürdürülebilir olmasını sağlar.
Nesne yönelimli programlamanın en önemli kavramlarından biri, sınıflar ve nesneler arasındaki farktır ve şu şekilde tanımlanır:
- Sınıf (Class) — Bir programcı tarafından bir nesne için oluşturulan şablon. Bu, bu sınıftan türetilecek herhangi bir nesneyi tanımlayacak bir dizi özelliği belirler.
- Nesne (Object) — Bir sınıfın örneği. Bu, sınıfın programda somutlaştırıldığı, gerçekleştirilen versiyonudur.
Bu kavramlar, (sınıflar için) kalıplar oluşturmak ve ardından (nesneler için) bu kalıpları kullanmak için kullanılır.
Bu öğreticide, sınıflar oluşturmayı, nesneleri başlatmayı, __init__
yöntemiyle nitelikleri başlatmayı ve aynı sınıftan birden fazla nesneyle çalışmayı ele alacağız.
Sınıflar
Sınıflar, nesneler oluşturmak için kullanabileceğiniz bir şablon veya prototip gibidir.
Sınıfları, tıpkı def
anahtar kelimesiyle fonksiyonları tanımladığımız gibi, class
anahtar kelimesiyle tanımlarız.
Bilgi: Bu öğreticideki örnek kodları takip etmek için, yerel sisteminizde python3
komutunu çalıştırarak bir Python etkileşimli kabuğu açabilirsiniz. Daha sonra örnekleri >>>
istemcisinden sonra kopyalayıp yapıştırabilir veya düzenleyebilirsiniz.
Haydi, Shark adında bir sınıf tanımlayalım. Bu sınıfa, biri yüzme, diğeri harika olma ile ilgili iki fonksiyon ekleyelim:
Kopekbaligi.py
class Kopekbaligi:
def yuz(self):
print("Kopekbaligi yüzüyor.")
def harika_ol(self):
print("Kopekbaligi harika oluyor.")
Bu fonksiyonlar, Kopekbaligi
sınıfının altına girintili yazıldıkları için metot olarak adlandırılır. Metotlar, bir sınıf içinde tanımlanan özel bir fonksiyon türüdür.
Bu fonksiyonların argümanı olan self
, bu sınıfa dayalı olarak oluşturulan nesnelere bir referanstır. Sınıfın örneklerine (veya nesnelerine) başvurmak için self
her zaman ilk parametre olacaktır, ancak tek parametre olması gerekmez.
Bu sınıfı tanımlamak herhangi bir Kopekbaligi
nesnesi oluşturmadı; sadece daha sonra tanımlayabileceğimiz bir Kopekbaligi
nesnesi için bir şablon oluşturdu. Yani, yukarıdaki programı bu aşamada çalıştırırsanız hiçbir şey döndürülmez.
Yukarıda Kopekbaligi
sınıfını oluşturmak bize bir nesne için bir şablon sağladı.
Nesneler
Bir nesne, bir sınıfın örneğidir. Yukarıda tanımlanan Kopekbaligi
sınıfını alıp, bunun bir nesnesini veya örneğini oluşturmak için kullanabiliriz.
Haydi, Sammy
adlı bir Kopekbaligi
nesnesi oluşturalım:
sammy = Kopekbaligi()
Burada, sammy
nesnesini sınıfın bir örneği olarak başlattık ve bunu Kopekbaligi()
'na eşitledik.
Şimdi, Kopekbaligi
nesnesi sammy
ile iki metodu kullanalım:
sammy = Kopekbaligi()
sammy.yuz()
sammy.harika_ol()
Kopekbaligi
nesnesi sammy
, yüz()
ve harika_ol()
metotlarını kullanıyor. Bunları, bir nesnenin bir niteliğine başvurmak için kullanılan (.)
(nokta) operatörüyle çağırdık. Bu durumda, nitelik bir metottur ve parantezlerle çağrılır, tıpkı bir fonksiyonu çağırır gibi.
self
anahtar kelimesi, Kopekbaligi
sınıfında tanımlanan metotların bir parametresi olduğu için, sammy
nesnesi metotlara otomatik olarak iletilir. self
parametresi, metotların nesne niteliklerine başvurmasını sağlar.
Metotları çağırdığımızda, parantezlerin içine hiçbir şey yazmasak da, sammy
nesnesi .
operatörü ile otomatik olarak iletilir.
Programın bağlamında nesneyi ekleyelim:
```python Kopekbaligi.py
class Kopekbaligi: def yuz(self): print("Kopekbaligi yüzüyor.")
def harika_ol(self):
print("Kopekbaligi harika oluyor.")
def ana(): sammy = Kopekbaligi() sammy.yuz() sammy.harika_ol()
if name == "main": ana()
Programı çalıştırıp ne yaptığını görelim:
```bash
$ python Kopekbaligi.py
Çıktı
Kopekbaligi yüzüyor.
Kopekbaligi harika oluyor.
Nesne sammy
, programın ana()
fonksiyonunda iki metodu çağırıyor ve bu metotların çalışmasını sağlıyor.
Yapıcı Metot
Yapıcı metot, verileri başlatmak için kullanılır. Bir sınıfın bir nesnesi oluşturulur oluşturulmaz çalışır. Aynı zamanda __init__
metodu olarak bilinir, bu sınıfın ilk tanımıdır ve şu şekilde görünür:
class Kopekbaligi:
def __init__(self):
print("Bu bir yapıcı metottur.")
Yukarıdaki __init__
metodunu Kopekbaligi
sınıfına eklerseniz, programda hiçbir şey değiştirmeden çalıştırdığınızda şu çıktıyı alırsınız:
Çıktı
Bu bir yapıcı metottur.
Kopekbaligi yüzüyor.
Kopekbaligi harika oluyor.
Bu, yapıcı metodun otomatik olarak başlatılmasından kaynaklanır. Bu metodu, sınıf nesnelerinizle yapmak istediğiniz herhangi bir başlatmayı gerçekleştirmek için kullanmalısınız.
Yukarıdaki yapıcı metodun yerine, nesnelere isim atamak için kullanabileceğimiz bir isim
değişkeni kullanan bir tane oluşturalım. isim
parametresini geçeceğiz ve self.isim
'i isim
'e eşitleyeceğiz:Kopekbaligi.py
class Kopekbaligi:
def __init__(self, isim):
self.isim = isim
Daha sonra fonksiyonlarımızdaki dizeleri isimlere referans verecek şekilde şu şekilde değiştirebiliriz:
class Kopekbaligi:
def __init__(self, isim):
self.isim = isim
def yuz(self):
# İsme atıfta bulunun
print(self.isim + " yüzüyor.")
def harika_ol(self):
# İsme atıfta bulunun
print(self.isim + " harika oluyor.")
Son olarak, Kopekbaligi
nesnesi sammy
'nin adını "Sammy"
olarak ayarlayabiliriz:
Kopekbaligi.py
```python Kopekbaligi.py
class Kopekbaligi: def init(self, isim): self.isim = isim
def yuz(self):
print(self.isim + " yüzüyor.")
def harika_ol(self):
print(self.isim + " harika oluyor.")
def ana():
# Kopekbaligi nesnesinin adını belirle
sammy = Kopekbaligi("Sammy")
sammy.yuz()
sammy.harika_ol()
if name == "main": ana()
Programı çalıştıralım:
```bash
$ python Kopekbaligi.py
Çıktı
Sammy yüzüyor.
Sammy harika oluyor.
Gördüğümüz gibi, nesneye geçirdiğimiz isim yazdırılıyor. __init__
metodunu isim
parametresi (ve self
anahtar kelimesi) ile tanımladık ve metodun içinde bir değişken tanımladık.
Yapıcı metot otomatik olarak başlatıldığı için, onu açıkça çağırmamıza gerek yoktur. Sınıf adından sonra parantez içindeki argümanları geçtiğimizde yeterlidir.
Eğer bir parametre daha eklemek istersek, örneğin yaş
, bunu __init__
metoduna geçirerek yapabiliriz:
class Kopekbaligi:
def __init__(self, isim, yas):
self.isim = isim
self.yas = yas
Sonrasında, nesnemiz sammy
için Sammy
'nin yaşını şu şekilde belirtebiliriz:
sammy = Kopekbaligi("Sammy", 5)
Bu yaşı kullanmak için sınıfta bunu çağıran bir metot oluşturmamız gerekir.
Yapıcı metotlar, bir nesnenin belirli niteliklerini başlatmamıza olanak tanır.
Birden Fazla Nesne ile Çalışmak
Sınıflar, aynı taslak temelinde birçok benzer nesne oluşturmamıza olanak tanır.
Bu işlemin nasıl çalıştığını anlamak için programımıza başka bir Kopekbaligi
nesnesi ekleyelim:
```python Kopekbaligi.py
class Kopekbaligi:
def init(self, isim):
self.isim = isim
def yuz(self):
print(self.isim + " yüzüyor.")
def harika_ol(self):
print(self.isim + " harika oluyor.")
def ana(): sammy = Kopekbaligi("Sammy") sammy.harika_ol() stevie = Kopekbaligi("Stevie") stevie.yuz()
if name == "main": ana()
Burada `"Stevie"` ismini geçirerek `stevie` adında ikinci bir `Kopekbaligi` nesnesi oluşturduk. Bu örnekte, `sammy` ile `harika_ol()` yöntemini, `stevie` ile `yuz()` yöntemini kullandık.
Programı çalıştıralım:
```bash
$ python Kopekbaligi.py
Çıktı
Sammy harika oluyor.
Stevie yüzüyor.
Çıktı, Kopekbaligi
sınıfından hem sammy
hem de stevie
nesnelerini kullandığımızı gösteriyor.
Sınıflar, her birini sıfırdan oluşturmadan, aynı kalıbı takip eden birden fazla nesne oluşturmayı mümkün kılar.
Sonuç
Bu eğitimde, sınıflar oluşturmayı, nesneleri başlatmayı, yapıcı yöntemle özellikleri başlatmayı ve aynı sınıfa ait birden fazla nesneyle çalışmayı ele aldık.
Nesne tabanlı programlama, kodun yeniden kullanılmasını sağlar çünkü bir program için oluşturulan nesneler başka bir programda da kullanılabilir. Ayrıca, nesne tabanlı programlama daha iyi bir program tasarımı sunar; zira karmaşık programların yazılması zordur ve dikkatli bir planlama gerektirir, bu da zamanla programın bakımını daha kolay hale getirir.
Lisa Tagliaferri tarafından yazılan How To Construct Classes and Define Objects in Python 3 Program makalesinin düzenlenmiş çevirisi.
Daha Fazla Oku:
- Sonraki Makale: Python 3'te Sınıf ve Örnek Değişkenlerini Anlama
- Önceki Makale: Python 3'te args ve *kwargs Nasıl Kullanılır