Bunun için uzun süre beklediniz çünkü bu Dunder Magic yöntemlerinden bahsetmekten uzun süre kaçındım.
Bu videoda nihayet ne yaptıklarını ortaya çıkaracağız.
Şimdi rder yöntemini kullanarak örneğimizin yöntem olarak nelere sahip olduğunu görebiliyoruz.
Ve size bunların temel nesne sınıfımızdan miras alındığını söylemiştik.
Şimdi bu bizim özel yöntemlerimizin altını çiziyor.
Örneğin, bir dizinin uzunluğunu söylememizi sağlayan length gibi şeylere nasıl sahip olduğumuzu hatırlayın.
Bunlar aslında bu dunder yöntemleri kullanılarak uygulanmaktadır.
Sınıfımız aracılığıyla oluşturulan nesneler üzerinde Python'a özgü işlevleri kullanmamızı sağlarlar.
Size ne demek istediğimi göstereyim.
Yeni bir sınıf oluşturacağız ve bu bir oyuncak sınıfı olacak.
Şimdi burada, bir oyuncak tanımlayacağız ve onu self ile başlatacağız.
O zaman renk ve h olduğunu söyleyeceğiz.
Şimdi renk eşittir renk diyeceğiz.
Yani bunlar bizim niteliklerimiz olacak.
Ve H.
Harika.
İşte bizim sınıfımız.
Şimdi, diyelim ki bir aksiyon figürü yaratmak istiyoruz.
Bu aksiyon figürü, diyelim ki kırmızı renkte ve yaşta bir oyuncakla örneklenecektir.
Yepyeni, yani sıfır.
Şimdi, diyelim ki bu nesneyle birlikte gelen se tr gibi bir şey kullanırsam, str veya aksiyon figürü yaparsam.
Nokta alt çizgi alt çizgi se tt ah bu şekilde.
Ve bunu basıyoruz.
Bunu anladığımızı görüyoruz.
Bizim yaptığımızla tamamen aynı şey.
SDR Aksiyon Figürü.
Bunun gibi.
Şuna bak.
Bu çift alt çizgi dunder yöntemleri Python'un tanıdığı özel yöntemlerdir.
Örneğin, Dunder STR.
Bu özel yöntem, str yerleşik işlevini kullanarak bunun gibi aksiyon figürünü kullanmamızı sağlar.
Aslına bakarsanız, Python belgelerinde özel yöntem adları bölümüne bakarsanız.
Bu dunder yöntemlerinde temel özelleştirmeler yapabileceğimizi göreceksiniz.
Ve kullanabileceğimiz tüm bu dunder yöntemlerinin uzun bir listesi var.
Şimdi.
Gidip her birini okumayın.
Çok fazla var ve bunları çok sık kullanmayacaksınız.
Bunları kullanacağınız yalnızca belirli birkaç durum vardır ve fikir, bunları nasıl değiştireceğinizi ve
kaputun altında nasıl çalıştıklarını bilmektir.
Evet.
Birkaç örnek üzerinden gidelim.
Örneğin, SDR'nin ne yaptığını değiştirelim.
Kendiminkini tanımlayacağım.
SDR burada.
Kendimi arayacağım.
Ve sonra burada, farklı bir şey iade edeceğim.
Diyelim ki bir SE dizesi döndüreceğim.
Yani, diyelim ki, kendi kendine öğrenilen renk.
Eğer bunu çalıştırırsam.
Kızardım.
Dunder yöntemlerini değiştirmeyin dediğimi hatırlıyor musunuz?
Bazen buna izin verilir.
Belki de sınıfınızın belirli bir şekilde davranmasını istediğiniz durumlar, özel durumlar vardır.
Tıpkı sözlükler gibi, listeler, tuple'lar ve Python'daki tüm nesnelerimiz belirli şekillerde davranabilir.
Listelere bir dizin numarasıyla ve bir sözlüğe bir anahtarla erişildiği gibi.
Bunların hepsi bu standart yöntemler kullanılarak uygulanmaktadır.
Ve burada görüyorsunuz ki bunu değiştirdiğimiz için SDR artık aksiyon figürü üzerinde çağrıldığında kırmızı döndürüyor.
Aksiyon figüründen başka bir şeyi değiştirmez.
Eğer bunu çalıştırırsam, hala bu şekilde çalıştığını göreceksiniz.
Çünkü bu bir dize.
SDR yalnızca bu belirli nesne üzerinde kullandığımızda değiştirilir.
Bu şekilde.
Başka ne gibi güzel şeyler yapabiliriz?
Uzunluğun anlamını da değiştirebiliriz.
O kadar uzun ki kendi kendime söyleyebilirim.
Ve burada sadece geri dönebilirim.
Şimdi yazdırırsam.
Aksiyon figürünün uzunluğu.
Ve Çalıştır'a tıklıyorum.
Beş mi alacağım?
Çok güzel.
Bu arada, bu alt çizgi biraz can sıkıcı olmaya başladıysa, ki açıkçası benim için biraz can sıkıcı olmaya başladı,
buradaki ayarlara tıklayacağım ve kod zekasını kaldıracağım, böylece kodumun yanlış olduğunu
bana söylemeyecek, ancak umarım kendimiz hata ayıklayabiliriz.
Pekala, işte başlıyoruz.
Sadece uzunluğu değiştirdik.
Dunder 5'i geri getirecek.
Denemeye devam edelim.
Alt çizgi, alt çizgi, silme ve silme gibi bir şey de yapabiliriz.
Peki, aslında daha önce görmediğimiz delete anahtar kelimesini kullanalım.
Sil.
Sadece geri dön diyebiliriz.
Silinmiş.
Bu şekilde gitmelisiniz ve burada sadece baskı yapalım.
Çalıştır'a tıklarsam yazdırma siliniyor.
Görüyorum ki silinmiş olarak geri dönmüşüm.
Şimdi silme anahtar kelimesini size öğretmedim çünkü bu çok fazla göreceğiniz bir şey değil.
Genellikle bu, programlarımızda kişisel olarak kaçınmak istediğim bazı komik hatalara neden olabilir, ancak delete anahtar
sözcüğü programımızda sahip olabileceğimiz bir tür değişkeni siler.
Pekala, başka ne var?
Bunu değiştirelim.
Çağrı denen şeyi kullanmak için.
Kömür de ilginç bir konu.
Diyelim ki kömür ile geri döneceğiz ve evet diyelim.
Soru işareti.
Carl'ın en güzel yanı, oyuncak sınıfımıza bir süper güç kazandırmış olması.
Aksiyon figürü diyebiliriz ve sonra diyebiliriz ki, call ile aslında şimdi bu parantezlerle gerçek nesneyi
çağırabiliriz.
Bu yüzden call kullanarak, bir fonksiyonu çağırmak için bu özel yola sahibim, bu arada, kaputun altında,
fonksiyonları çağırabilmemizin yolu bu dunder call'ı kullanmaktır.
Ve eğer Çalıştır'a tıklarsam.
Anladım mı?
Evet.
Ne kadar havalı değil mi?
Tamam.
Son bir tane daha, çünkü sanırım bu fikri anlamaya başladınız.
Dediğim gibi, bunların hepsi burada mevcut.
Genellikle bunların üzerine yazmak istemezsiniz, ancak isterseniz bunu yapabilecek güce sahip olduğunuzu
bilmek istersiniz.
Bir sonraki öğe get item olarak adlandırılır.
O zaman tanımlama yapalım.
Yine, ilk parametre olarak self kullanacağız ve ardından index için I diyelim ve burada
self noktasını döndüreceğiz ve bunu eklemeden önce bir nitelik ekleyelim.
Sözlüğüm için self dot my dict diyeceğim ve ardından name ekleyeceğim.
Yo yo'ya eşit.
Ve evcil hayvanları yanlışa eşit yapalım mı?
Şimdi bunu kullanarak, sikimi söyleyebilirim.
Ve öğeyi verdiğimiz indekse göre döndürün.
Size ne demek istediğimi göstereyim.
Eğer şimdi baskı yaparsam.
Aksiyon figürü.
Nokta.
Ve burada, nokta yerine köşeli parantezler kullanıyoruz, tıpkı bir sözlük öğesi alırken
yaptığımız gibi.
Şimdi get öğesini kullanarak, name'de hangi özelliklere sahip olduğumuzu söyleyebiliriz?
Diyelim ki isim ve eğer bunu yazdırırsam.
Bir eklemeyi unuttum.
Burada virgül var.
Tekrar deneyelim.
Ve eğer aşağı kaydırırsam hataları okumakta gerçekten iyi olduğumu görebilirsiniz.
Namer Name aksiyon figürü tanımlanmamıştır çünkü fuga değil aksiyon figürüdür.
Bu daha iyi.
Şuna bak.
Benim adım.
Yo Yo, get öğesini kullanarak bu ayraç gösterimini kullanarak erişebiliyordu.
Dunder.
Çok, çok havalı.
Dolayısıyla bu özel sihirli yöntemler gerçekten ilginçtir çünkü sınıflarımızda bazı özel değişiklikler
yapmamıza olanak tanır.
Ayrıca Python'da varsayılan türlerin nasıl erişime sahip olduğunu ve tüm bu özel sözdizimine sahip olma yeteneklerini
de anlayabilirsiniz.
Artık bizim de böyle bir gücümüz var.
Bir ara verelim ve biraz egzersiz yapalım.