Python’da Özel (Magic) Metodlar

Magic Metodlar, Python’da özel (veya magic) metodlar, çift alt çizgi (__) ile başlayan ve biten metodlardır. Bu metodlar, Python’daki sınıfların belirli davranışlarını özelleştirmek için kullanılır. Örneğin, bir nesnenin nasıl karşılaştırılacağını, nasıl temsil edileceğini veya nasıl aritmetik işlemlerle etkileşime gireceğini kontrol etmek için bu metodlar kullanılır. Özel metodlar, Python’un sınıflarını daha esnek ve güçlü hale getirir.

1. __init__ Metodu

__init__ metodu, bir sınıftan yeni bir nesne oluşturulduğunda otomatik olarak çağrılan yapıcı (constructor) metodudur. Nesneye ilk değerlerin atanmasını sağlar.

Örnek:
class Araba:
def __init__(self, marka, model, yil):
self.marka = marka
self.model = model
self.yil = yil

araba1 = Araba("Toyota", "Corolla", 2020)
print(araba1.marka) # Toyota

2. __str__ ve __repr__ Metodları

  • __str__: Nesnenin str() veya print() ile çağrıldığında nasıl görüneceğini kontrol eder.
  • __repr__: Nesnenin repr() ile çağrıldığında veya etkileşimli kabukta gösterildiğinde nasıl görüneceğini kontrol eder.
Örnek:

class Araba:
def __init__(self, marka, model, yil):
self.marka = marka
self.model = model
self.yil = yil

def __str__(self):
return f"{self.marka} {self.model} ({self.yil})"

def __repr__(self):
return f"Araba('{self.marka}', '{self.model}', {self.yil})"

araba1 = Araba("Toyota", "Corolla", 2020)
print(araba1) # Toyota Corolla (2020)
print(repr(araba1)) # Araba('Toyota', 'Corolla', 2020)


3. __len__ ve __getitem__ Metodları

  • __len__: len() fonksiyonu çağrıldığında çalıştırılır ve nesnenin uzunluğunu döndürür.
  • __getitem__: Bir nesnenin bir öğesine indeksleme ile erişildiğinde çağrılır.
Örnek:

class Liste:
def __init__(self, elemanlar):
self.elemanlar = elemanlar

def __len__(self):
return len(self.elemanlar)

def __getitem__(self, index):
return self.elemanlar[index]

my_list = Liste([1, 2, 3, 4, 5])
print(len(my_list)) # 5
print(my_list[2]) # 3


4. Aritmetik Özel Metodlar

Python’da aritmetik işlemleri özelleştirmek için özel metodlar kullanılır:

  • __add__: + operatörü için
  • __sub__: - operatörü için
  • __mul__: * operatörü için
  • __truediv__: / operatörü için
  • __floordiv__: // operatörü için
  • __mod__: % operatörü için
  • __pow__: ** operatörü için
Örnek:

class Vektor:
def __init__(self, x, y):
self.x = x
self.y = y

def __add__(self, other):
return Vektor(self.x + other.x, self.y + other.y)

def __str__(self):
return f"Vektor({self.x}, {self.y})"

v1 = Vektor(2, 3)
v2 = Vektor(4, 5)
v3 = v1 + v2 # __add__ metodu çağrılır
print(v3) # Vektor(6, 8)


5. Karşılaştırma Özel Metodları

Python’da nesneleri karşılaştırmak için özel metodlar kullanılır:

  • __eq__: == operatörü için
  • __ne__: != operatörü için
  • __lt__: < operatörü için
  • __le__: <= operatörü için
  • __gt__: > operatörü için
  • __ge__: >= operatörü için
Örnek:

class Kisi:
def __init__(self, isim, yas):
self.isim = isim
self.yas = yas

def __eq__(self, other):
return self.yas == other.yas

def __lt__(self, other):
return self.yas < other.yas

kisi1 = Kisi("Ali", 25)
kisi2 = Kisi("Veli", 30)

print(kisi1 == kisi2) # False
print(kisi1 < kisi2) # True


6. __call__ Metodu

__call__ metodu, bir nesnenin fonksiyon gibi çağrılmasına olanak tanır.

Örnek:
class Toplayici:
def __init__(self, baslangic=0):
self.toplam = baslangic

def __call__(self, sayi):
self.toplam += sayi
return self.toplam

topla = Toplayici()
print(topla(10)) # 10
print(topla(20)) # 30

Bu örnekte, Toplayici sınıfından oluşturulan topla nesnesi bir fonksiyon gibi çağrılabilir.

7. __enter__ ve __exit__ Metodları

Bu metodlar, bir nesnenin with ifadesi içinde nasıl davranacağını kontrol eder. Bu, kaynak yönetimi için kullanışlıdır (örneğin, dosya işlemleri).

Örnek:
class DosyaYoneticisi:
def __init__(self, dosya_adi, mod):
self.dosya_adi = dosya_adi
self.mod = mod

def __enter__(self):
self.dosya = open(self.dosya_adi, self.mod)
return self.dosya

def __exit__(self, exc_type, exc_val, exc_tb):
self.dosya.close()

with DosyaYoneticisi("deneme.txt", "w") as dosya:
dosya.write("Merhaba, dünya!")

Bu örnekte, __enter__ metodu dosyayı açar ve __exit__ metodu dosyayı kapatır.

 

Python’da özel (magic) metodlar, sınıfların davranışlarını özelleştirmek için kullanılır. Bu metodlar, sınıfların Python’daki yerleşik işlemlerle nasıl etkileşime girdiğini kontrol eder ve geliştiricilere sınıfları daha esnek ve güçlü hale getirme olanağı sağlar. Bu metodları kullanarak, sınıflarınızı daha etkili bir şekilde özelleştirebilir ve Python‘un sunduğu çeşitli olanaklardan tam anlamıyla yararlanabilirsiniz.

Nesne Yönelimli Programlama (OOP)

Comments

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.