Merhaba bu yazımda sizlerle python sinif yapısında kullanılan magic (sihirli) methodları inceleyeceğiz. Bu metodlar siz sınıf içerisinde belirli amaçlar için çalışan methodlarda diyebiliriz. Şimid öncelikle __new__ sihirli methoduna bakalım.
Python __new__ Method Kullanımı
Bu method sınıf oluşuturulurken çalışmasını istediğiniz bir sınıf veya methoda varsa bu alanda çalışabilirsiniz. Python ön yükleyicisi olarak bilinen __init__ methodunda önce çalışıyor ve sonra init methodun çalışmasını sağlıyor. Tabi bunun sorunsuz bir şekilde çalışmasını istiyorsak aşağıdaki örnekğe uyugun yapmalısınız.
1 2 3 4 5 6 7 8 9 10 11 | class merhaba: def __new__(cls,*args,**kwargs): print("New methoda çalıştı") inst=object.__new__(cls) return inst def __init__(self,isim): print("Ön yükleyici çalıştı.") print("Merhaba",isim) sinif=merhaba("Meryem") |
__new__ methodu çağırdık ve burada *args,**kwargs parametreler sınıf yüklenirken gönderilen tüm parametreleri alarak new den sonra gelen __init__ metoduna return ile aktardık.
Python __init__ Method Kullanımı
Bildiğiniz gibi her yazılım dilinde construct ile nitelendirilen ön yükleyici methoddur. Bu method sınıf örneklenirken kendiliğinden çalışır. Ön yüklenmede yapılması gereken işler burda yapılır.
1 2 3 4 5 6 7 | class merhaba: def __init__(self,isim): print("Ön yükleyici çalıştı.") print("Merhaba",isim) sinif=merhaba("Meryem") |
Python __del__ Metho Kullanımı
Python oluşturmuş olan bir sınıfının işlemi bittikten sonra kendiliğinden çalışan sınıftır. Bu sınıfa destructor method yani yıkıcı method olarakda kullanılabilmektedir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class merhaba: def __init__(self,isim): print("Ön yükleyici çalıştı.") print("Merhaba",isim) def __del__(sefl): print("Yıkıcı method çalıştı") sinif=merhaba("Meryem") #############EKRAN CIKTISI############## #Ön yükleyici çalıştı. #Merhaba Meryem #Yıkıcı method çalıştı |
Python __str__ Method Kullanımı
Oluşturulan bir sınıf ekrana basılmaya çalışıldığından kendiliğinden çalışan sınıftır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | class merhaba: def __init__(self,isim): self.isim=isim def __str__(self): return f"Merhaba {self.isim} bu sınıfın ekran çıtısıdır." selam=merhaba("Meryem") print(selam) print(selam.__str__()) #############EKRAN CIKTISI############## #Merhaba Meryem bu sınıfın ekran çıtısıdır. #Merhaba Meryem bu sınıfın ekran çıtısıdır. |
Python __add__ Method Kullanımı
Örneklenen iki adet sınıfın toplama operatörü kullanıldığında kendiliğinden çalışan sınıftır.
1 2 3 4 5 6 7 8 9 10 11 | class merhaba: def __init__(self,sayi): self.sayi=sayi def __add__(self,object): return self.sayi+object.sayi s1=merhaba(5) s2=merhaba(10) print(s1+s2) #############EKRAN CIKTISI############## #15 |
Örenk olarak oluşturduğumuz iki sınıfı toplayama çalıştığımızda __add__ methodu devreye girerek iki sınıf içersindeki sayıları toplayarak geriye değer dönderdik.
Python __gt__ method Kullanımı
İki sınıf arasında >= matıksal opratör olarak kullanmamızı sağlar. Geriye true veya false değer döner
1 2 3 4 5 6 7 8 9 10 11 | class merhaba: def __init__(self,sayi): self.sayi=sayi def __ge__(self,object): return self.sayi>=object.sayi s1=merhaba(5) s2=merhaba(10) print(s1>=s2) #############EKRAN CIKTISI############## #15 |
Python __ne__ method Kullanımı
Örneklemesi yapılmış İki sınıf arasında != matıksal opratör olarak kullanmamızı sağlar. Geriye true veya false değer döner
1 2 3 4 5 6 7 8 9 10 11 12 13 | class merhaba: def __init__(self,sayi): self.sayi=sayi def __ge__(self,object): return self.sayi>=object.sayi def __ne__(self,object): return self.sayi!=object.sayi s1=merhaba(5) s2=merhaba(10) print(s1!=s2) #############EKRAN CIKTISI############## #True |
Python __eq__ method Kullanımı
Örneklemesi yapılmış İki sınıf arasında == matıksal opratör olarak kullanmamızı sağlar. Geriye true veya false değer döner
1 2 3 4 5 6 7 8 9 10 11 12 | class merhaba: def __init__(self,sayi): self.sayi=sayi def __eq__(self,object): return self.sayi==object.sayi s1=merhaba(5) s2=merhaba(10) print(s1==s2) #############EKRAN CIKTISI############## #False |
Python __le__ method Kullanımı
Örneklemesi yapılmış İki sınıf arasında <= matıksal opratör olarak kullanmamızı sağlar. Geriye true veya false değer döner
1 2 3 4 5 6 7 8 9 10 11 12 | class merhaba: def __init__(self,sayi): self.sayi=sayi def __eq__(self,object): return self.sayi<=object.sayi s1=merhaba(5) s2=merhaba(10) print(s1==s2) #############EKRAN CIKTISI############## #True |
Python __lt__ method Kullanımı
Örneklemesi yapılmış İki sınıf arasında < matıksal opratör olarak kullanmamızı sağlar. Geriye true veya false değer döner
1 2 3 4 5 6 7 8 9 10 11 12 | class merhaba: def __init__(self,sayi): self.sayi=sayi def __eq__(self,object): return self.sayi<object.sayi s1=merhaba(5) s2=merhaba(10) print(s1==s2) #############EKRAN CIKTISI############## #True |
Yine aşağıdaki tabloya bakarak megic methodları inceleyebilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | import math class merhaba: def __init__(self,sayi): self.sayi=sayi def __eq__(self,object): return self.sayi<object.sayi def __pos__(self): self.sayi+=1 def __neg__(self): self.sayi-=1 def __abs__(self): return self.sayi def __invert__(self): return "fintext" def __round__(self): return self.sayi def __ceil__(self): return self.sayi def __trunc__(self): return self.sayi s1=merhaba(5) s2=merhaba(10) print(s1.__sizeof__()) #sınıfın dosya boyutunu döndürür print(*dir(s1.__dir__)) #sınıfın metho listesini döndürür +s1 #__post__ print(s1.sayi) -s1 print(s1.sayi) print(abs(s1)) print(~s1) print(round(s1)) print(math.ceil(s1)) print(math.trunc(s1)) #############EKRAN CIKTISI############## # 32 # __call__ __class__ __delattr__ __dir__ __doc__ __eq__ __format__ __ge__ __getattribute__ __gt__ __hash__ __init__ __init_subclass__ __le__ __lt__ __module__ __name__ __ne__ __new__ # __qualname__ __reduce__ __reduce_ex__ __repr__ __self__ __setattr__ __sizeof__ __str__ __subclasshook__ __text_signature__ # 6 # 5 # 5 # fintext # 5 # 5 # 5 |
Yapıcı ve Yıkıcı Mehtodlar | Açıklaması |
---|---|
__new__(cls) | Sınıf oluşturulurken ilk çalışan method |
__init__(self) | Yapıcı method sınıf oluşturulduğunda çalışır |
__del__(self) | Yıkıcı method sınıfın işi bittiğinde çalışır |
Tek operatörle çalışan metodlar | Açıklaması |
---|---|
__pos__(self) | Sınıfa artı operator eklendiğinde |
__neg__(self) | Sınıfa – operator eklendiğinde |
__abs__(self) | Mutlak değeri alındığında |
__invert__(self) | Tekli aritmetik işlemi bit düzeyinde NOT ~ uygular. |
__round__(self,n) | Round işlemi ile çağrıldığında |
__floor__(self) | Floor işlemi ile çağırıldığında |
__ceil__(self) | math.ceil() metodu kullanıldığında |
__trunc__(self) | math.trunc() fonksiyonu uygulandığında |
İkili opretörler | Description |
---|---|
__iadd__(self) | obj += obj (+=) operatörü kullanıldığında. |
__isub__(self) | obj -= obj (-=) operatörü kullanıldığında. |
__imul__(self) | obj *= obj (*=) operatörü kullanıldığında. |
__ifloordiv__(self) | obj //= obj (/=) operatörü kullanıldığında. |
__idiv__(self) | obj /= obj (/=) operatörü kullanıldığında. |
__itruediv__(self) | Bölme işilme yapıdığında |
__imod__(self) | obj %= obj (%=) mod işlemi kullanıldığında. |
__ipow__(self) | obj **= obj (*=) operatörü kullanıldığında. |
__ilshift__(self) | obj<<=obj sol bite kaydırıldığında |
__irshift__(self) | obj>>=obj Bir sağ bite kaydırıldığında . |
__iand__(self) | obj&=obj bit düzeyinde and atama. |
__ior__(self) | obj|=obj bit düzeyinde or atama. |
__ixor__(self) | obj ^= obj bit düzeyinde XOR atam |
Tür Dönüştürme işlemlerinde | Açıklama |
---|---|
__int__(self) | int() int dönüştürülmek istendiğinde. |
__float__(self) | float() float dönüştürülmek istendiğinde. |
__complex__(self) | complex() complex dönüştürülmek istendiğinde. |
__oct__(self) | oct() oct dönüştürülmek istendiğinde. |
__hex__(self) | hex() hex dönüştürülmek istendiğinde. |
__index__(self) | int dönüşümünde |
__trunc__(self) | math.trunc() metodu uygulandığında |