Python - İleri Seviye Python

Sınıflarda Dunder Methotlar

Yayın tarihi :10-Ara-21
Bölüm kodlarını ve/veya veri setlerini indir.

Sınıflarda Dunder Methotlar, sınıfların methotllarında başında ve sonunda çift çizgi("__XXX__") bulunan methotlara Dunder (Double Underscore(Çift Altçizgi)) methotlar veye Magic (sihirli) methodlar da denir. Sınıf yapılara içersinde gördüğümüz "__init__" yapısıda bir dunder methodtur. Sınıf içerisinde tanımlı olan dunder methotları listelemek için basit bir sınıf oluşturarak inceleyelim.

class Insan():    
    def __init__(self,isim,dogumTarihi,emailAdresi):
        self.isim=isim
        self.dogumTarihi=dogumTarihi
        self.emailAdresi=emailAdresi
insan1=Insan("Enes","1989","e@gmail.com")
#.__dir__() ifadesi sınıf örneklendirmesi içersinde bulunan değişkenleri, methodları ve dunder methotlarını listelemek için kullanılır.
print(insan1.__dir__())

Çıktı:

['isim', 'dogumTarihi', 'emailAdresi', '__module__', '__init__', '__dict__', 
'__weakref__', '__doc__', '__repr__', '__hash__', '__str__', '__getattribute__', 
'__setattr__', '__delattr__', '__lt__', '__le__', '__eq__', '__ne__', '__gt__', 
'__ge__', '__new__', '__reduce_ex__', '__reduce__', '__subclasshook__', '__init_subclass__', 
'__format__', '__sizeof__', '__dir__', '__class__']

Dunder Methodlarından bazılarını inceleyelim;

1. __init__() : Oluşturulan sınıfın bir örneğini oluşturmak için kullanılır. Önceki derslerimizde de değindiğimiz bir methodtur.

  def __init__(self,isim,dogumTarihi,emailAdresi):
        self.isim=isim
        self.dogumTarihi=dogumTarihi
        self.emailAdresi=emailAdresi

2.__str__(), __repr__(): Genellikle sınıftan oluşturulan örneğin temsil değerini ekrana yazdırmak için kullanılır. __str__() son kullanıcıya çıktı oluşturmak için kullanılırken __repr__() esas olarak hata ayıklama ve geliştirme için kullanılır. __repr__()'nin amacı net olmak ve __str__() 'nin ise okunabilir olmaktır

class Insan():    
    def __init__(self,isim,dogumTarihi,emailAdresi):
        self.isim=isim
        self.dogumTarihi=dogumTarihi
        self.emailAdresi=emailAdresi

insan1=Insan("Enes","1989","e@gmail.com")
print(insan1)
print(insan1.__str__())
print(insan1.__repr__())

Çıktı:

<__main__.Insan object at 0x000002341DE8B340>
<__main__.Insan object at 0x000002341DE8B340>
<__main__.Insan object at 0x000002341DE8B340>

Dikkat edilirse print(insan1), print(insan1.__str__()) ve print(insan1.__repr__()) değerleri çıktıları aynıdır. bu değerler yerine istediğimiz sonucun dönmesini sağlayabiliriz. Bunun için ilgili yöntemi geçersiz kılarak kendimiz method çıktısını değiştirebiliriz.

class Insan():    
    def __init__(self,isim,dogumTarihi,emailAdresi):
        self.isim=isim
        self.dogumTarihi=dogumTarihi
        self.emailAdresi=emailAdresi
    
    def __str__(self):
        return "İsim:{} Doğum Tarihi:{} Email Adresi:{}".format(self.isim,self.dogumTarihi,self.emailAdresi)
    
    def __repr__(self):
        return "İsim:{} Doğum Tarihi:{} Email Adresi:{}".format(self.isim,self.dogumTarihi,self.emailAdresi)    
    
insan1=Insan("Enes","1989","e@gmail.com")

print(insan1)
print(insan1.__str__())
print(insan1.__repr__())

Çıktı:

İsim:Enes Doğum Tarihi:1989 Email Adresi:e@gmail.com
İsim:Enes Doğum Tarihi:1989 Email Adresi:e@gmail.com
İsim:Enes Doğum Tarihi:1989 Email Adresi:e@gmail.com

3.__dir__():  Sınıf örneklendirmesi içersinde bulunan değişkenleri, methodları ve dunder methotlarını listelemek için kullanılır.

class Insan():    
    def __init__(self,isim,dogumTarihi,emailAdresi):
        self.isim=isim
        self.dogumTarihi=dogumTarihi
        self.emailAdresi=emailAdresi

insan1=Insan("Enes","1989","e@gmail.com")
print(insan1.__dir__())

Çıktı:

['isim', 'dogumTarihi', 'emailAdresi', '__module__', '__init__', '__dict__', 
'__weakref__', '__doc__', '__repr__', '__hash__', '__str__', '__getattribute__', 
'__setattr__', '__delattr__', '__lt__', '__le__', '__eq__', '__ne__', '__gt__', 
'__ge__', '__new__', '__reduce_ex__', '__reduce__', '__subclasshook__', '__init_subclass__', 
'__format__', '__sizeof__', '__dir__', '__class__']

4.__len__(): Sınıf değişkenlerinin uzunluklarının bulunmasını sağlamaktadır.

class Insan():    
    def __init__(self,isim,dogumTarihi,emailAdresi):
        self.isim=isim
        self.dogumTarihi=dogumTarihi
        self.emailAdresi=emailAdresi
    
    def __len__(self):
        return len(self.item)

insan1=Insan("Enes","1989","e@gmail.com")
print(insan1.dogumTarihi.__len__())

Çıktı:

4
Paylaş:

Yorum Yap (*Yorumunuza kod eklemek isterseniz Kod Parçacığı Ekle butonuna tıklayarak ekleyebilirsiniz.)

Yorumlar

Henüz hiç yorum yapılmamış, ilk yorum yapan sen ol.