Duck Typing
Coddy'nin Python Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 24 / 64.
Ördek tipleme, bir nesnenin ne olduğuna değil, ne yapabildiğine odaklanır. Bir nesne ihtiyacınız olan yöntemlere sahipse, sınıf türü ne olursa olsun onu kullanabilirsiniz.
İşte aynı metotlara sahip, birbiriyle ilişkisi olmayan iki sınıf:
class Duck:
def swim(self):
return "Duck swimming"
def quack(self):
return "Quack!"
class Person:
def swim(self):
return "Person swimming"
def quack(self):
return "Person imitating a duck: Quack!"Duck ve Person'ın aynı üst sınıftan miras almadığına, ancak her ikisinin de swim() ve quack() metotlarına sahip olduğuna dikkat edin.
Herhangi bir "ördek benzeri" nesneyle çalışan bir fonksiyon oluşturun:
def make_it_swim_and_quack(duck_like_object):
print(duck_like_object.swim())
print(duck_like_object.quack())Bu fonksiyon nesnenin türüyle ilgilenmez - sadece nesnenin gerekli metotlara sahip olmasıyla ilgilenir.
Fonksiyonu her iki sınıf ile birlikte kullanın:
make_it_swim_and_quack(Duck())
make_it_swim_and_quack(Person())Çıktı:
Duck swimming
Quack!
Person swimming
Person imitating a duck: Quack!Başka bir "ördek benzeri" sınıf ekleyin:
class Robot:
def swim(self):
return "Robot swimming with propellers"
def quack(self):
return "Robot sound: BEEP BEEP!"
make_it_swim_and_quack(Robot())Çıktı:
Robot swimming with propellers
Robot sound: BEEP BEEP!Temel Nokta: Duck typing, kalıtım olmadan çok biçimliliğe olanak tanır. Bir nesne ihtiyacınız olan yöntemlere sahipse onu kullanabilirsiniz. Bu, Python kodunu esnek hâle getirir ve "izin istemektense af dilemek daha kolaydır" ilkesini izler.
Görev
OrtaBu meydan okumada, farklı dosya benzeri nesnelerle ördek tiplemesini gösteren bir sistem uygulayacaksın:
textfile.py:read()vewrite(data)yöntemlerine sahipTextFilesınıfını uyguladatabase.py: Eşleşen yöntem imzalarına sahipDatabasesınıfını uygulanetworkresource.py: Eşleşen yöntem imzalarına sahipNetworkResourcesınıfını uyguladriver.py- Uygulamanın doğru çalıştığını doğrulayacak test durumlarını uygula
Her dosya, uygulamana rehberlik eden ayrıntılı TODO yorumları içerir.
Kendin dene
# TODO: textfile.py dosyasından TextFile sınıfını içe aktarın
# TODO: database.py dosyasından Database sınıfını içe aktarın
# TODO: networkresource.py dosyasından NetworkResource sınıfını içe aktarın
def process_data(data_source, data):
# TODO: data_source üzerinde read() metodunu çağırın ve sonucu yazdırın
# TODO: data_source üzerinde write(data) metodunu çağırın ve sonucu yazdırın
pass
# Farklı veri kaynakları ile test edin - BU TEST KODUNU DEĞİŞTİRMEYİN
text_file = TextFile()
database = Database()
network = NetworkResource()
print("Processing text file:")
process_data(text_file, "Hello, world!")
print("\
Processing database:")
process_data(database, "User record")
print("\
Processing network resource:")
process_data(network, "GET request")Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama 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ıKendi başına pratik yap: Online Python derleyicisi