Sihirli Metotlara Giriş
Coddy'nin Python Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 33 / 64.
Sihirli metotlar (dunder metotları olarak da adlandırılır), başında ve sonunda çift alt çizgi bulunan özel metotlardır. Python, belirli işlemlere yanıt olarak bunları otomatik olarak çağırır.
İşte sihirli metotlara sahip bir sınıf örneği:
class Book:
def __init__(self, title, author, pages):
self.title = title
self.author = author
self.pages = pages
def __str__(self):
return f"{self.title} by {self.author}"__init__ metodu, bir nesne oluşturduğunuzda otomatik olarak çağrılır:
my_book = Book("Python Programming", "John Smith", 350)__str__ metodu, nesneyi bir dizeye dönüştürdüğünüzde otomatik olarak çağrılır:
print(my_book) # __str__ metodunu otomatik olarak çağırır
print(str(my_book)) # Ayrıca __str__ metodunu çağırırÇıktı:
Python Programming by John Smith
Python Programming by John Smith__str__ metodu olmadan, yazdırma işlemi nesnenin bellek konumunu gösterir:
class SimpleBook:
def __init__(self, title):
self.title = title
simple = SimpleBook("Test Book")
print(simple) # <__main__.SimpleBook object at 0x...>Uzunluk için başka bir sihirli metot ekleyin:
class Book:
def __init__(self, title, author, pages):
self.title = title
self.author = author
self.pages = pages
def __str__(self):
return f"{self.title} by {self.author}"
def __len__(self):
return self.pages
my_book = Book("Python Programming", "John Smith", 350)
print(len(my_book)) # __len__ metodunu otomatik olarak çağırırÇıktı:
350Önemli Nokta: Sihirli metotlar çift alt çizgi (__method__) ile başlar ve biter ve Python tarafından otomatik olarak çağrılırlar. Nesnelerinizin str(), len() gibi yerleşik fonksiyonlarla ve operatörlerle çalışmasına olanak tanıyarak sınıflarınızı daha Pythonic ve kullanımı daha sezgisel hale getirirler.
Görev
KolayBu meydan okumada, sihirli metotlara sahip bir Counter sınıfı uygulayacaksınız.
counter.py- Düzenlemeniz gereken dosyadır ve uygulamanıza rehberlik edecek TODO yorumları içerirdriver.py- Kapsamlı test durumları içerir
TODO yorumlarını takip ederek counter.py dosyasındaki Counter sınıfını ve driver.py dosyasındaki test durumlarını uygulayın. Sınıf; isteğe bağlı değerlerle başlatmayı, dize temsilini ve toplama işlemlerini desteklemelidir.
Kopya kağıdı
Sihirli metotlar (dunder metotları), Python'un belirli işlemlere yanıt olarak otomatik olarak çağırdığı, çift alt çizgili özel metotlardır.
Yaygın sihirli metotlar:
__init__- Bir nesne oluşturulduğunda çağrılır__str__-str()veyaprint()ile dizeye dönüştürülürken çağrılır__len__-len()fonksiyonu kullanılırken çağrılır
class Book:
def __init__(self, title, author, pages):
self.title = title
self.author = author
self.pages = pages
def __str__(self):
return f"{self.title} by {self.author}"
def __len__(self):
return self.pages
my_book = Book("Python Programming", "John Smith", 350)
print(my_book) # Otomatik olarak __str__ metodunu çağırır
print(len(my_book)) # Otomatik olarak __len__ metodunu çağırır__str__ olmadan, yazdırma işlemi okunabilir bir format yerine nesnenin bellek konumunu gösterir.
Kendin dene
# TODO: counter.py dosyasından Counter sınıfını içe aktarın
# Şu formatı kullanın: from counter import Counter
# Kapsamlı test durumu işleyicisi
test_case = input()
if test_case == "init_test":
# TODO: Varsayılan değerle başlatmayı test edin
# Hiçbir argüman olmadan bir sayaç oluşturun ve yazdırın
# Beklenen çıktı: "Count: 0"
pass
elif test_case == "init_with_value":
# TODO: Belirli bir değerle başlatmayı test edin
# Başlangıç değeri 10 olan bir sayaç oluşturun ve yazdırın
# Not: print() dolaylı olarak __str__ metodunu çağırır, ancak buradaki odak noktamız __init__ metodunu test etmektir
# Beklenen çıktı: "Count: 10"
pass
elif test_case == "addition":
# TODO: Toplama işlemini test edin
# Değeri 3 olan bir sayaç oluşturun, üzerine 7 ekleyin ve sonucu yazdırın
# Beklenen çıktı: "Count: 10"
pass
elif test_case == "chained_addition":
# TODO: Zincirleme toplama işlemlerini test edin
# Değeri 1 olan bir sayaç oluşturun, 2 ekleyin, ardından sonuca 3 ekleyin ve yazdırın
# Beklenen çıktı: "Count: 6"
pass
elif test_case == "negative_values":
# TODO: Negatif değerlerle test edin
# Değeri -5 olan bir sayaç oluşturun ve yazdırın
# Ardından üzerine -3 ekleyin ve sonucu yazdırın
# Beklenen çıktılar: "Count: -5" ve "Count: -8"
pass
elif test_case == "zero_value":
# TODO: Sıfır değerleriyle test edin
# Değeri 0 olan bir sayaç oluşturun, 0 ekleyin ve yazdırın
# Beklenen çıktı: "Count: 0"
pass
elif test_case == "large_values":
# TODO: Büyük değerlerle test edin
# Değeri 1000000 olan bir sayaç oluşturun ve 9000000 ekleyin
# Beklenen çıktı: "Count: 10000000"
pass
elif test_case == "multiple_counters":
# TODO: Birden fazla sayaç arasındaki etkileşimi test edin
# Değeri 5 olan counter1 ve değeri 10 olan counter2 oluşturun
# Her iki sayacı da yazdırın
# Beklenen çıktılar: "Count: 5" ve "Count: 10"
pass
elif test_case == "type_validation":
# TODO: Farklı türleri eklemeyi test edin
# Değeri 5 olan bir sayaca bir ondalıklı sayı (2.5) eklemeyi deneyin
# Beklenen çıktı: "Count: 7.5"
passBu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Object Oriented Programming bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesnelerself ParametresiMetotlarÖzniteliklerYapıcı Metot (__init__)Özet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımsuper() FonksiyonuMetot Geçersiz KılmaÇoklu KalıtımMetot Çözümleme SırasıÖzet - Çalışan Hiyerarşisi7Özel Metotlar
Sihirli Metotlara GirişOperatör Aşırı YüklemeKapsayıcı Sihirli MetotlarıÖzet - Özel Liste10Tasarım Kalıpları Bölüm 1
Tasarım kalıplarına girişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı13Final Meydan Okumaları
E-öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi5Çok Biçimlilik (Polymorphism)
Metot Geçersiz Kılmaya Yeniden BakışDuck TypingSoyut Sınıflar ve MetotlarArayüz TasarımıÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kompozisyon ve KalıtımMixinsStatik ve Sınıf MetotlarıSınıf DekoratörleriBağlam Yöneticileri11Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit Kalıbı