Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
mustafamuratcoskun
GitHub Repository: mustafamuratcoskun/Sifirdan-Ileri-Seviyeye-Python-Programlama
Path: blob/master/Nesne Tabanlı Programlama/Nesne Tabanlı Programlama - Özel Metodlar.ipynb
765 views
Kernel: Python 3

Nesne Tabanlı Programlama - Özel Metodlar

Nesne tabanlı programlamada son olarak sınıfların özel metodlarını nasıl kendimiz yazarız öğrenmeye çalışalım. Özel metodlar, daha önceden de bahsettiğimiz gibi bizim özel olarak çağırmadığımız ancak her classa ait metodlardır. Bunların çoğu biz tanımlamasak bile Python tarafından varsayılan olarak tanımlanır. Ancak bu metodların bazılarını da özel olarak bizim tanımlamamız gerekmektedir. Daha önceden gördüğümüz init metodu bu metodlara bir örnektir. Bu konuda bu metodlarını nasıl tanımlayacağımızı öğrenmeye çalışacağız. Şimdi örneklerimize geçelim.

class Kitap(): pass
kitap1 = Kitap() # __init__ metodu çağrılıyor.
len(kitap1) # __len__ metodu çağrılacak ancak tanımlı değil. Bunu özellikle bizim tanımlamamız gerekiyor.
--------------------------------------------------------------------------- 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()
print(kitap1) # __str__ metodu çağrılır.
<__main__.Kitap object at 0x000000CEE4E93390>
del kitap1 # del anahtar kelimesi bir objeyi siler ve __del__ metodu çağrılır.
kitap1
--------------------------------------------------------------------------- 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.

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
Kitap Objesi oluşuyor....

str metodu

Normalde print(kitap1) ifadesi ekrana şöyle bir yazı yazdırıyor.

print(kitap1)
<__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.

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)
kitap1 = Kitap("İstanbul Hatırası","Ahmet Ümit",561,"Polisiye")
Kitap Objesi oluşuyor....
print(kitap1)
İ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.

len(kitap1)
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-77-ab6b326ab715> in <module>() ----> 1 len(kitap1) TypeError: object of type 'Kitap' has no len()
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")
Kitap Objesi oluşuyor....
len(kitap1) # KEndi __len__ metodumuz çağrıldı.
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.

kitap1 = Kitap("İstanbul Hatırası","Ahmet Ümit",561,"Polisiye")
Kitap Objesi oluşuyor....
del kitap1
kitap1
--------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-87-361ccf2f9d6d> in <module>() ----> 1 kitap1 NameError: name 'kitap1' is not defined
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")
Kitap Objesi oluşuyor....
del kitap1 # Ekstra ekrana yazdırma özelliği ekledik.
Kitap objesi siliniyor.......
kitap1
--------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-96-361ccf2f9d6d> in <module>() ----> 1 kitap1 NameError: name 'kitap1' is not defined

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.