Nesne Yönelimli Programlama – Özel Metodlar
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
class Kitap(): pass kitap1 = Kitap() # __init__ metodu çağrılıyor. print(len(kitap)) # __len__ metodu çağrılacak ancak tanımlı değil. Bunu özellikle bizim tanımlamamız gerekiyor. """ Çıktı --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-66-5f5391921a08> in <module>() ----> 1 len(kitap1) # __len__ metodu çağrılacak ancak tanımlı değil. Bunu özellikle bizim tanımlamamız gerekiyor. TypeError: object of type 'Kitap' has no len() """ |
1 2 3 4 5 6 7 8 |
print(kitap1) # __str__ metodu çağrılır. """ Çıktı <__main__.Kitap object at 0x000000CEE4E93390> """ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
del kitap1 # del anahtar kelimesi bir objeyi siler ve __del__ metodu çağrılır. print(kitap1) """ Çıktı --------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-69-361ccf2f9d6d> in <module>() ----> 1 kitap1 NameError: name 'kitap1' is not defined """ |
Şimdi buradaki metodları kendimiz nasıl tanımlayacağız öğrenmeye çalışalım.
init metodu
init metodunu kendimiz tanımlarsak artık kendi init fonksiyonumuz çalışacaktır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
class Kitap(): def __init__(self,isim,yazar,sayfa_sayısı,tür): print("Kitap Objesi oluşuyor....") self.isim = isim self.yazar = yazar self.sayfa_sayısı = sayfa_sayısı self.tür = tür kitap1 = Kitap("İstanbul Hatırası","Ahmet Ümit",561,"Polisiye") # Kendi metodumuz """ Çıktı Kitap Objesi oluşuyor.... """ |
str metodu
Normalde print(kitap1) ifadesi ekrana şöyle bir yazı yazdırıyor.
1 2 3 4 5 6 7 8 |
print(kitap1) """ Çıktı <__main__.Kitap object at 0x000000CEE886EAC8> """ |
Ancak eğer str metodunu kendimiz tanımlarsak artık ekrana kitap1 in içeriğini daha anlaşılır yazabileceğiz.
1 2 3 4 5 6 7 8 9 10 |
class Kitap(): def __init__(self,isim,yazar,sayfa_sayısı,tür): print("Kitap Objesi oluşuyor....") self.isim = isim self.yazar = yazar self.sayfa_sayısı = sayfa_sayısı self.tür = tür def __str__(self): # Return kullanmamız gerekli return "İsim: {}\nYazar: {}\nSayfa Sayısı: {}\nTür: {}".format(self.isim,self.yazar,self.sayfa_sayısı,self.tür) |
1 2 3 4 5 6 7 8 |
kitap1 = Kitap("İstanbul Hatırası","Ahmet Ümit",561,"Polisiye") """ Çıktı Kitap Objesi oluşuyor.... """ |
1 2 3 4 5 6 7 8 9 10 11 |
print(kitap1) """ Çıktı İsim: İstanbul Hatırası Yazar: Ahmet Ümit Sayfa Sayısı: 561 Tür: Polisiye """ |
len metodu
len metodu normalde özel olarak biz tanımlamazsak tanımlanan bir metod değil. Onun için bu metodu kendimiz tanımlamamız gereklidir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
class Kitap(): def __init__(self,isim,yazar,sayfa_sayısı,tür): print("Kitap Objesi oluşuyor....") self.isim = isim self.yazar = yazar self.sayfa_sayısı = sayfa_sayısı self.tür = tür def __str__(self): # Return kullanmamız gerekli return "İsim: {}\nYazar: {}\nSayfa Sayısı: {}\nTür: {}".format(self.isim,self.yazar,self.sayfa_sayısı,self.tür) def __len__(self): return self.sayfa_sayısı kitap1 = Kitap("İstanbul Hatırası","Ahmet Ümit",561,"Polisiye") print(len(kitap1)) # KEndi __len__ metodumuz çağrıldı. """ Çıktı 561 """ |
del metodu
del metodu Pythonda bir objeyi del anahtar kelimesiyle sildiğimiz zaman çalıştırılan metoddur. Bu metodu kendimiz tanımlayarak ekstra özellikler ekleyebiliriz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
kitap1 = Kitap("İstanbul Hatırası","Ahmet Ümit",561,"Polisiye") del kitap1 print(kitap1) """ Çıktı Kitap Objesi oluşuyor.... --------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-87-361ccf2f9d6d> in <module>() ----> 1 kitap1 NameError: name 'kitap1' is not defined """ |
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 |
class Kitap(): def __init__(self,isim,yazar,sayfa_sayısı,tür): print("Kitap Objesi oluşuyor....") self.isim = isim self.yazar = yazar self.sayfa_sayısı = sayfa_sayısı self.tür = tür def __str__(self): # Return kullanmamız gerekli return "İsim: {}\nYazar: {}\nSayfa Sayısı: {}\nTür: {}".format(self.isim,self.yazar,self.sayfa_sayısı,self.tür) def __len__(self): return self.sayfa_sayısı def __del__(self): print("Kitap objesi siliniyor.......") kitap1 = Kitap("İstanbul Hatırası","Ahmet Ümit",561,"Polisiye") del kitap1 """ Çıktı Kitap Objesi oluşuyor.... Kitap objesi siliniyor....... """ |
Siz de bunlar gibi çoğu özel metodu ihtiyacınız olduğu zaman kendiniz yazabilirsiniz. Özel metodlar için güzel bir ingilizce kaynak için şuradan faydalanabilirsiniz.
http://www.diveintopython3.net/special-method-names.html