Duck Typing
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Python di Coddy. Pelajaran 24 dari 64.
Duck typing berfokus pada apa yang bisa dilakukan sebuah object, bukan apa wujudnya. Jika sebuah object memiliki method yang kamu perlukan, kamu bisa menggunakannya, apa pun tipe class-nya.
Berikut dua class yang tidak saling berkaitan dengan method yang sama:
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!"Perhatikan bahwa Duck dan Person tidak mewarisi class induk yang sama, tetapi keduanya memiliki method swim() dan quack().
Buat fungsi yang dapat digunakan dengan objek apa pun yang "mirip bebek":
def make_it_swim_and_quack(duck_like_object):
print(duck_like_object.swim())
print(duck_like_object.quack())Fungsi ini tidak peduli dengan tipe data object. Fungsi ini hanya peduli bahwa object tersebut memiliki method yang diperlukan.
Gunakan fungsi dengan kedua class:
make_it_swim_and_quack(Duck())
make_it_swim_and_quack(Person())Output:
Duck swimming
Quack!
Person swimming
Person imitating a duck: Quack!Tambahkan satu class lain yang "mirip bebek":
class Robot:
def swim(self):
return "Robot swimming with propellers"
def quack(self):
return "Robot sound: BEEP BEEP!"
make_it_swim_and_quack(Robot())Output:
Robot swimming with propellers
Robot sound: BEEP BEEP!Poin utama: Duck typing memungkinkan polimorfisme tanpa pewarisan. Jika sebuah object memiliki method yang kamu perlukan, kamu bisa menggunakannya. Ini membuat kode Python fleksibel dan mengikuti prinsip "lebih mudah meminta maaf daripada meminta izin."
Tantangan
SedangDalam tantangan ini, kamu akan menerapkan sistem yang menunjukkan duck typing dengan berbagai object yang mirip file:
textfile.py: Terapkan classTextFiledengan methodread()danwrite(data)database.py: Terapkan classDatabasedengan signature method yang samanetworkresource.py: Terapkan classNetworkResourcedengan signature method yang samadriver.py- Terapkan kasus uji yang akan memverifikasi bahwa implementasimu berfungsi dengan benar
Setiap file berisi komentar TODO terperinci yang memandu implementasimu.
Coba sendiri
# TODO: Impor class TextFile dari textfile.py
# TODO: Impor class Database dari database.py
# TODO: Impor class NetworkResource dari networkresource.py
def process_data(data_source, data):
# TODO: Panggil method read() pada data_source dan cetak hasilnya
# TODO: Panggil method write(data) pada data_source dan cetak hasilnya
pass
# Uji dengan berbagai sumber data. JANGAN UBAH KODE UJI INI
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")Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPclass vs objectParameter selfmethodAtributMethod Konstruktor (__init__)Rangkuman: Kalkulator Sederhana4Pewarisan
Pewarisan DasarFungsi super()Penimpaan MethodPewarisan BergandaUrutan Resolusi MethodRingkasan: Hierarki Karyawan5Polimorfisme
Meninjau Ulang Method OverridingDuck Typingclass dan method AbstrakDesain InterfaceRingkasan: Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi vs PewarisanMixinsMetode Statis dan Metode ClassDecorator ClassPengelola Konteks11Pola Desain Bagian 2
Pola PerintahPola AdapterPola DecoratorPola Template MethodPola StatePola Composite3Property class
Variabel instance vs variabel classDekorator propertyAtribut privatRangkuman: Pengelola Rekening Bank6Enkapsulasi
Anggota Public, Protected, PrivateModifier AksesPenyembunyian InformasiDecorator Property Tingkat LanjutUlasan: Sistem Catatan Siswa12Proyek: Manajemen Perpustakaan
Ikhtisar Proyekclass Buku dan PenggunaSistem PeminjamanFitur PencarianAntarmuka AdminPengujian dan IntegrasiLatihan sendiri: Compiler Python online