Resim

Özel (Dunder/Magic) Metotlar

Özel (Dunder/Magic) Metotlar ve Operatör Aşırı Yükleme

Python'ın Sihirli Arka Kapısı

Python'da çift alt çizgi ile başlayan ve biten metotlara (örneğin __init__, __str__) Özel Metotlar (Special Methods) veya Dunder (Double Under Score) Metotlar denir.

Bu metotlar, bizim çağırmamız için değil, Python yorumlayıcısının dahili işlemleri tetiklendiğinde otomatik olarak çağrılması için tasarlanmıştır.

Operatör Aşırı Yükleme (Operator Overloading)

Özel metotların en güçlü kullanım alanı, Python'ın yerleşik operatörlerini (örneğin +, -, ==, *) kendi sınıf nesnelerimiz için yeniden tanımlamaktır. Buna Operatör Aşırı Yükleme denir.

  • Amaç: Kendi nesnelerimizin de int veya str gibi yerleşik tiplerle doğal bir şekilde etkileşime girmesini sağlamak.

Python Operatörü/FonksiyonuTetiklenen Dunder MetotAçıklama
a + ba.__add__(b)Toplama işlemi.
a == ba.__eq__(b)Eşitlik karşılaştırması.
a < ba.__lt__(b)"Küçüktür" karşılaştırması.
len(a)a.__len__()Uzunluk fonksiyonu.
a()a.__call__()Nesneyi fonksiyon gibi çağırma.

Örnek: İki Nesneyi Toplama (__add__)

class Puan:
    def __init__(self, deger):
        self.deger = deger

    # __add__ metodu ile '+' operatörünü yüklüyoruz
    def __add__(self, diger_puan):
        # 'diger_puan' parametresi, '+' işaretinden sonraki 
        #nesneyi alır.
        
        if isinstance(diger_puan, Puan):
            # Eğer diğer nesne de Puan ise, değerleri toplar
            yeni_deger = self.deger + diger_puan.deger
            return Puan(yeni_deger) # Yeni bir Puan nesnesi döndürülür
        else:
            # Puan değilse, toplama işlemini desteklemediğimizi 
            #belirtiriz
            raise TypeError("Sadece 'Puan' nesneleri toplanabilir.")

    def __str__(self):
        return f"Puan: {self.deger}"

# Kullanım
puan1 = Puan(50)
puan2 = Puan(30)

# Python, '+' operatörünü gördüğünde otomatik olarak 
#puan1.__add__(puan2) çağrır.
puan_toplami = puan1 + puan2 

print(puan_toplami) # Çıktı: Puan: 80

__len__ Metodu

__len__ metodunu kullanarak, kendi koleksiyon sınıfınızın len() yerleşik fonksiyonuyla çalışmasını sağlayabilirsiniz.

class Koleksiyonum:
    def __init__(self, veriler):
        self.veriler = veriler

    def __len__(self):
        # len() çağrıldığında bu metot çalışır
        return len(self.veriler)

k = Koleksiyonum([10, 20, 30])
print(len(k)) # Çıktı: 3 (Kendi __len__ metodumuzdan geldi)

Kendiniz Deneyebilirsiniz:

🔥 Python Kariyerinizi Hemen Başlatın!

Hemen kursumuza kaydolun ve bu güçlü araçları kullanarak profesyonel Python geliştiricisi olma yolunda ilk adımı atın. Kursumuzdaki uygulamalı modüller, sizi sadece bir yazılımcı adayı değil, hazır bir profesyonel haline getirecek. Python Eğitimini Udemy platformunda bulabilirsiniz.

[ Python Eğitimi Sıfırdan İleri Seviye ]

Tıklayın ve Python Eğitimine Hemen Kaydolun!

Yorumlar

Bu blogdaki popüler yayınlar

Python random Modülü

Python print()

Yazılım Nedir?