Menu
CoddyTech

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."

challenge icon

Tantangan

Sedang

Dalam tantangan ini, kamu akan menerapkan sistem yang menunjukkan duck typing dengan berbagai object yang mirip file:

  • textfile.py: Terapkan class TextFile dengan method read() dan write(data)
  • database.py: Terapkan class Database dengan signature method yang sama
  • networkresource.py: Terapkan class NetworkResource dengan signature method yang sama
  • driver.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")
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Python online