2 - Sınıflar, Nesneler ve Yapıcı Metotlar
2026
Analoji:
class Anahtar Kelimesiclass anahtar kelimesi ile sınıf tanımlanır.pass ifadesi, şimdilik sınıfın içini boş bırakmak için kullanılır.kopek1 = Kopek() # Kopek sınıfından bir nesne oluştur
kopek2 = Kopek() # Başka bir Kopek nesnesi oluştur__init__ Metodu: Başlatıcı (Initializer)__init__ ve “Constructor” İfadesiTeknik Not
Birçok kaynak __init__ için “constructor” terimini kullanır; ancak Python’da __init__ daha doğru bir biçimde başlatıcı (initializer) gibi düşünülmelidir. Nesnenin yaratımı daha düşük seviyede gerçekleşir; __init__ bu yaratılmış nesnenin ilk durumunu kurar.
self Parametresiself olmalıdır.self, o anda üzerinde işlem yapılan nesneyi temsil eder.self aracılığıyla erişilir.self Nasıl “Geçiyor”?Aşağıdaki iki çağrı eşdeğerdir:
class Kopek:
def __init__(self, isim, cins):
self.isim = isim
self.cins = cins
def havla(self):
return f"{self.isim} havlıyor!"
kopek1 = Kopek("Bobi", "Golden Retriever")
print(kopek1.havla())
Kopek.havla(kopek1)kopek1.havla() yazdığınızda Python, metodu çağırırken nesneyi otomatik olarak ilk argüman (self) olarak iletir.Python’da değişkenler çoğunlukla nesnenin kendisini değil, nesneye giden referansı tutar.
class Kopek:
def __init__(self, isim, cins):
self.isim = isim
self.cins = cins
a = Kopek("Bobi", "Golden")
b = a # b, a ile aynı nesneyi gösterir
b.isim = "Max"
print(a.isim) # Çıktı: Max
print(b.isim) # Çıktı: Maxb = a bir “kopya nesne” üretmez; aynı nesneyi işaret eden ikinci bir referans üretir.self ile tanımlanırlar.class Kopek:
tur = "Memeli" # Sınıf niteliği
def __init__(self, isim, cins):
self.isim = isim # Örnek niteliği
self.cins = cins # Örnek niteliği
kopek1 = Kopek("Bobi", "Golden Retriever")
kopek2 = Kopek("Çakıl", "Terrier")
print(kopek1.isim) # Çıktı: Bobi
print(kopek2.cins) # Çıktı: Terrier
print(Kopek.tur) # Çıktı: Memeli
print(kopek1.tur) # Çıktı: Memeli (Sınıf niteliğine erişim)Neden tehlikeli?
Sınıf seviyesinde tanımlanan liste/sözlük gibi değiştirilebilir (mutable) yapılar, tüm nesneler tarafından paylaşılır.
Doğru yaklaşım:
self olmalıdır.class Kopek:
def __init__(self, isim, cins):
self.isim = isim
self.cins = cins
def havla(self):
return f"{self.isim} havlıyor!"
def otur(self):
return f"{self.isim} oturuyor."
kopek1 = Kopek("Bobi", "Golden Retriever")
print(kopek1.havla()) # Çıktı: Bobi havlıyor!
print(kopek1.otur()) # Çıktı: Bobi oturuyor.print mi return mü?Pratik Kural
returnprintcls olmalıdır.@classmethod dekoratörü ile tanımlanırlar.Dekoratörler
Fonksiyonların veya metotların davranışlarını değiştirmek/genişletmek için kullanılan yapılardır. İleride daha sistematik ele alınacaktır.
self) ne de sınıfa (cls) ihtiyaç duyar.@staticmethod dekoratörü ile tanımlanırlar.Stil Notu
Static metotlar teknik olarak instance üzerinden de çağrılabilir; ancak okunabilirlik açısından genellikle sınıf üzerinden çağrılması tercih edilir.
self ve cls Farkıself: Instance metotlarında kullanılır; çağrılan nesneyi temsil eder.cls: Class metotlarında kullanılır; çağrılan sınıfı temsil eder.class Araba:
def __init__(self, marka, model, renk):
self.marka = marka
self.model = model
self.renk = renk
def bilgileri_getir(self):
return f"Marka: {self.marka}, Model: {self.model}, Renk: {self.renk}"
def calistir(self):
return "Araba çalıştırılıyor..."
def durdur(self):
return "Araba durduruluyor."
a = Araba("Toyota", "Corolla", "Beyaz")
print(a.bilgileri_getir())
print(a.calistir())
print(a.durdur())class Dikdortgen:
def __init__(self, uzunluk, genislik):
self.uzunluk = uzunluk
self.genislik = genislik
def alan_hesapla(self):
return self.uzunluk * self.genislik
def cevre_hesapla(self):
return 2 * (self.uzunluk + self.genislik)
d = Dikdortgen(10, 4)
print(d.alan_hesapla()) # 40
print(d.cevre_hesapla()) # 28Bu örnek; sınıf niteliği, instance niteliği, instance metot ve static metot kavramlarını birlikte gösterir.
class Hayvan:
alem = "Animalia" # Sınıf niteliği (paylaşılan)
def __init__(self, tur, yas, renk):
self.tur = tur # Instance niteliği
self.yas = yas # Instance niteliği
self.renk = renk # Instance niteliği
def beslen(self):
return f"{self.tur} besleniyor."
@staticmethod
def foo():
return "haydaaaaa"
# Hayvan sınıfından örnek nesneler oluşturma
kedi = Hayvan("Kedi", 3, "Siyah")
kopek = Hayvan("Köpek", 5, "Kahverengi")
# Örnek nesneler üzerinde metotları çağırma
print(kedi.beslen())
print(kopek.beslen())
# Instance niteliği ve sınıf niteliği erişimi
print(kedi.yas) # 3
print(Hayvan.alem) # Animalia
# Static metot çağrısı
print(Hayvan.foo()) # haydaaaaa__init__, nesnenin başlangıç durumunu kuran başlatıcı metottur.self, instance metotlarında çağrılan nesneyi temsil eder; cls, class metotlarında çağrılan sınıfı temsil eder.@staticmethod ve @classmethod, sırasıyla statik ve sınıf metotları tanımlamak için kullanılır.Kalıtım (Inheritance)
super() FonksiyonuOgrenci adında bir sınıf tanımlayın. Öğrencilerin adı, soyadı, numarası ve notları (liste olarak) gibi özellikleri olsun.Ogrenci sınıfına, öğrencinin not ortalamasını hesaplayan bir metot ekleyin (değer döndürsün).Ogrenci sınıfına, öğrencinin bilgilerini metin olarak döndüren bir metot ekleyin (return ile).Ogrenci nesnesi oluşturun ve bu öğrencilerin bilgilerini ve not ortalamalarını ekrana yazdırın.Ogrenci sınıfına bir sınıf değişkeni ekleyin (toplam_ogrenci_sayisi gibi) ve her yeni öğrenci oluşturulduğunda __init__ içinde bu sayıyı artırın. İki öğrenci üretip sayacı yazdırın.Kitap adında bir sınıf tanımlayın. Kitapların adı, yazarı, sayfa sayısı ve fiyatı gibi özellikleri olsun.Kitap sınıfına, kitabın bilgilerini metin olarak döndüren bir metot ekleyin.Kitap sınıfına, kitabın fiyatına belirli bir oranda indirim uygulayan bir metot ekleyin (yeni fiyatı döndürsün veya self.fiyat’ı güncellesin; hangisini seçtiğinizi gerekçelendirin).Kitap nesnesi oluşturun ve bu kitapların bilgilerini ekrana yazdırın. Bir kitabın fiyatına indirim uygulayın ve tekrar yazdırın.