BİLGİSAYAR BİLİMİ KUR 1 - 2. DÖNEM 16. HAFTA - NESNE YÖNELİMLİ PROG. - SİHİRLİ METODLAR
- egitimdebilisim.com
- 12 Tem 2024
- 3 dakikada okunur
Güncelleme tarihi: 2 Nis
ÜNİTE:
1.3. PROGRAMLAMA
KAZANIMLAR:
1.3.5.2. Proje geliştirme sürecinde işbirlikli olarak görev alır.
PYTHON - Magic Methods (Sihirli Metodlar)
Python'daki sihirli metotlar (magic methods), özel bir işleve sahip olan ve çift alt çizgi (__) ile başlayan metotlardır. Nesne yönelimli programlamada (OOP) kullanılırlar ve nesnelerle belirli işlemleri yapmak için otomatik olarak çağrılırlar.
1. Nedir ve Ne İşe Yararlar?
Magic metodlar, Python'daki nesnelerin belirli durumlarda nasıl davranacağını tanımlamak için kullanılır.
Örneğin:
Bir nesne oluşturulurken (__init__).
Bir nesne yazdırılırken (__str__).
Operatörler kullanıldığında (__add__, sub, vb.).
Nesnelere dizisel erişim yapılırken (__getitem__, setitem).
2. Sık Kullanılan Magic Metodlar
Nesne Oluşturma ve Temsil
init (Başlatıcı metot)
Bir nesne oluşturulduğunda çağrılır.

str (String temsili)
print(obj) kullanıldığında çalışır.

🔹 str metodu, print(obj) veya str(obj) çağrıldığında nesnenin nasıl görüneceğini belirler.
🔹 Normalde bir nesneyi print() ile yazdırdığında Python, bellek adresini döndürür, ama str tanımlanırsa daha anlamlı bir çıktı verir.
str Olmadan Ne Olur?
Eğer str metodu yoksa, nesneyi print() ile yazdırmak şöyle bir çıktı üretir:


Bu bellek adresi, insan tarafından okunamaz. Python, dosyadaki tüm kodu çalıştırır ama "ana program" gibi davranmaz. Yani, modül sadece fonksiyonları, sınıfları ve değişkenleri içerir. Bu durumda, name değişkeni modülün adı ile eşleşir.
Ama str tanımlanırsa daha anlamlı bir çıktı verir.
repr (Geliştirici temsili)
repr(obj) çağrıldığında çalışır.
🔹 repr(obj) çağrıldığında çalışır.
🔹 Nesnenin teknik, geliştirici dostu bir temsilini döndürür.

repr Olmadan Ne Olur?
Eğer repr tanımlamazsak, Python varsayılan olarak bellek adresiyle bir çıktı üretir:

Bu bellek adresi programcılar için bile pek anlamlı değil.

str ile repr Farkı
Özellik | str | repr |
Amaç | Kullanıcı dostu çıktı | Geliştirici dostu çıktı |

Aritmetik İşlemler
Python'da +, -, *, / gibi operatörler, varsayılan olarak sayılar, diziler ve bazı yerleşik veri türleri için çalışır. Ancak, kendi oluşturduğunuz sınıflarda bunları kullanabilmek için özelleştirme yapılması gerekir. Örneğin + operatörünü kullanabilmek için add metodunu tanımlamanız gerekir.
add (+ operatörü)
Nesneleri toplamak için kullanılır.

sub (- operatörü)

mul ( operatörü)*

Karşılaştırmalar
eq (== operatörü)

lt (< operatörü) ve gt (> operatörü)

Eleman Erişimi
getitem (İndeksleme işlemi için)

print(sinif[0]) yazınca Python, otomatik olarak getitem metodunu çağırır.
self.ogrenciler[0] döndüğü için "Ahmet" sonucu alırız.
setitem (İndeks değiştirme işlemi için)

sinif[1] = "Fatma" yazınca Python, otomatik olarak setitem metodunu çağırır.
self.ogrenciler[1] = "Fatma" kodu çalışır ve "Mehmet", "Fatma" olur.
Özet
Sihirli Metot | Görevi |
init | Nesne oluşturulduğunda çalışır |
str | print(obj) çağrıldığında nesneyi metin olarak döndürür |
repr | repr(obj) çağrıldığında nesneyi geliştirici dostu biçimde döndürür |
add | + operatörüyle toplama işlemi yapar |
sub | - operatörüyle çıkarma işlemi yapar |
mul | * operatörüyle çarpma işlemi yapar |
eq | == ile eşitlik karşılaştırması yapar |
lt | < ile küçük mü karşılaştırması yapar |
gt | > ile büyük mü karşılaştırması yapar |
getitem | obj[indeks] ile eleman almayı sağlar |
setitem | obj[indeks] = yeni_deger ile eleman değiştirmeyi sağlar |
Magic Methods (Sihirli Metodlar) Özet Video:
Magic Methods (Sihirli Metodlar) Alıştırmaları:
1. init Metodu
Bir Araba sınıfı oluşturun. Araba sınıfının her bir nesnesi marka ve model bilgilerine sahip olsun. Nesne oluşturulduğunda, bu bilgileri içeren bir çıktı versin.

2. str Metodu
Bir Kişi sınıfı oluşturun. Bu sınıfın her bir nesnesinde isim ve yaş bilgileri olsun. Nesneyi print() ile yazdırdığınızda, "Adı: <isim>, Yaşı: <yaş>" formatında bir çıktı verin.

3. repr Metodu
Bir Kitap sınıfı oluşturun. Bu sınıfın her nesnesi isim ve yazar bilgilerine sahip olsun. repr() fonksiyonunu kullanarak kitap bilgilerini geliştici dostu formatta döndürün.

4. add Metodu
Sayı sınıfı oluşturun ve add metodu ile toplayın.

5. sub Metodu
Bir Nokta sınıfı oluşturun. Bu sınıfın nesneleri x ve y koordinatlarına sahip olsun. İki nokta arasındaki farkı - operatörü ile hesaplayacak bir sub metodu yazın.

6. mul Metodu
Bir Vektör sınıfı oluşturun. Bu sınıfın nesneleri x ve y bileşenlerine sahip olsun. * operatörü ile bir vektörü bir sayı ile çarpacak bir mul metodu yazın.

7. eq Metodu
Bir Daire sınıfı oluşturun. Bu sınıfın nesneleri yarıçap değerine sahip olsun. == operatörü ile iki dairenin eşit olup olmadığını karşılaştıracak bir eq metodu yazın.

8. lt Metodu
Bir Öğrenci sınıfı oluşturun. Öğrencilerin not bilgileri bulunsun. < operatörü ile iki öğrencinin notlarının karşılaştırılmasını sağlayacak bir lt metodu yazın.

9. gt Metodu
Bir Sayı sınıfı oluşturun. Bu sınıfın nesneleri değer bilgisi tutsun. > operatörü ile iki sayının karşılaştırılmasını sağlayacak bir gt metodu yazın.

10. getitem ve setitem Metotları
Bir Koleksiyon sınıfı oluşturun. Bu sınıfın nesnesi bir liste tutsun. obj[indeks] ile eleman almayı ve obj[indeks] = yeni_deger ile eleman değiştirmeyi sağlayan getitem ve setitem metotları yazın.

Magic Methods (Sihirli Metodlar) Alıştırma Çözümleri Özet Video:
Ödev:
Bir Dizi sınıfı oluşturun ve bu sınıfta getitem ve setitem magic metodlarını tanımlayın.
Görev:
Dizi sınıfını tanımlayın. Bu sınıfta init, getitem ve setitem metodlarını yazın.
Bu metodların, dizinin belirli indekslerine erişim ve atama işlemlerini nasıl gerçekleştirdiğini gözlemleyin.
Bu sınıftan bir nesne oluşturun, indeksler üzerinden erişim ve atama işlemleri yapın
Ouşturduğunuz kodların fotoğrafını aşağıdaki mail adresine gönderiniz.
Maile isim soy isim, sınıf ve okul numarası bilgilerinizi yazmayı unutmayınız.
egitimdebil@gmail.com
Önerilen program: IDE - PYTHON (Bilgisayarla çalışmayanlar, kodları deftere yazıp fotoğrafını gönderebilirler.)
Bilişim Teknolojileri Öğretmeni: İshak BEZCİ
Son gün ve saat : Pazar gece 12.00
Yorumlar