0Pricing
Python Academy · Pelajaran

Polimorfisme dan Duck Typing

Tulis kode polimorfik yang dapat bekerja dengan objek kompatibel apa pun.

Polimorfisme dan Duck Typing adalah pelajaran Python Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Python Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Python Academy mencakup 4 pelajaran total.

Pendahuluan

Polimorfisme memungkinkan objek yang berbeda merespons antarmuka yang sama. Pengetikan bebek berarti: jika sesuatu berperilaku seperti bebek, maka itu dianggap bebek.

Apa Itu Polimorfisme?

Polimorfisme berarti "banyak bentuk". Nama metode yang sama dapat bekerja secara berbeda pada objek yang berbeda. Python sangat mengandalkan konsep ini.
class Cat:
    def speak(self): return 'Meow'
class Dog:
    def speak(self): return 'Woof'
for animal in [Cat(), Dog()]:
    print(animal.speak())

Pengetikan Bebek

Python tidak memerlukan hierarki kelas untuk polimorfisme. Jika sebuah objek memiliki metode yang tepat, objek tersebut dapat digunakan. Antarmuka tidak diperlukan.
class Duck:
    def quack(self): return 'Quack'
class Person:
    def quack(self): return 'I am quacking like a duck'
def make_it_quack(duck):
    print(duck.quack())
make_it_quack(Duck())
make_it_quack(Person())

Fungsi Polimorfik

len() dapat digunakan pada string, daftar, kamus, dan tuple—semuanya karena mengimplementasikan __len__. Inilah polimorfisme bawaan.
for obj in ['hello', [1,2,3], {'a':1}]:
    print(type(obj).__name__, len(obj))

Pembebanan Operator

+ dapat digunakan pada bilangan bulat, bilangan pecahan, string, dan daftar karena masing-masing mengimplementasikan __add__ secara berbeda.
print(1 + 2)        # int addition
print('a' + 'b')    # string concat
print([1] + [2])    # list concat

Pengetikan Bebek Berbasis Protokol

Protokol iterasi: objek apa pun yang memiliki __iter__ dan __next__ dapat digunakan dalam perulangan for—tanpa memerlukan kelas dasar.
class Squares:
    def __init__(self, n): self.n,self.i=n,0
    def __iter__(self): return self
    def __next__(self):
        if self.i>=self.n: raise StopIteration
        x=self.i**2; self.i+=1; return x
print(list(Squares(5)))

EAFP vs LBYL

EAFP (Lebih Mudah Meminta Maaf daripada Meminta Izin) menggunakan try/except. LBYL (Periksa Sebelum Bertindak) menggunakan if/hasattr. Python mengutamakan EAFP.
# LBYL:
if hasattr(obj, 'quack'):
    obj.quack()
# EAFP (Pythonic):
try:
    'hello'.quack()
except AttributeError:
    print('no quack')

isinstance() untuk Pemanggilan yang Aman

Jika Anda memerlukan perilaku khusus berdasarkan tipe, isinstance() lebih rapi daripada menangkap AttributeError.
def process(data):
    if isinstance(data, str):
        return data.upper()
    elif isinstance(data, list):
        return [x*2 for x in data]
print(process('hi'))
print(process([1,2,3]))

Kelas Dasar Abstrak sebagai Protokol

from abc import ABC, abstractmethod mendefinisikan protokol formal. Subkelas harus mengimplementasikan metode abstrak.
from abc import ABC, abstractmethod
class Drawable(ABC):
    @abstractmethod
    def draw(self): pass
class Circle(Drawable):
    def draw(self): print('O')
Circle().draw()

typing.Protocol (3.8+)

class MyProtocol(Protocol): mendefinisikan subtipe struktural tanpa ABC. Konsep ini dapat digunakan bersama mypy untuk pemeriksaan statis.
from typing import Protocol
class Quackable(Protocol):
    def quack(self) -> str: ...
def make_quack(x: Quackable) -> str:
    return x.quack()
print('protocol demo')

Polimorfisme dalam Praktik

Rancang API yang menerima objek apa pun dengan antarmuka yang tepat. Dengan demikian, kode Anda dapat diperluas tanpa modifikasi.
class JSONSerializer:
    def serialize(self, obj): import json; return json.dumps(obj)
class XMLSerializer:
    def serialize(self, obj): return f'<data>{obj}</data>'
def export(data, serializer):
    return serializer.serialize(data)
print(export({'x': 1}, JSONSerializer()))

Pemeriksaan Singkat

Apa arti pengetikan bebek dalam Python?

Ringkasan

Polimorfisme: antarmuka sama, perilaku berbeda. Pengetikan bebek: perilaku lebih penting daripada tipe. Protokol mendefinisikan antarmuka secara informal. EAFP (try/except) merupakan gaya khas Python.

Lanjutkan

Kemajuan Anda sangat baik! Lanjutkan untuk menguasai konsep berikutnya.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Polimorfisme dan Duck Typing” gratis?

Ya — teks lengkap “Polimorfisme dan Duck Typing” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Python Academy, upgrade ke CoddyKit PRO. Kursus Python Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Polimorfisme dan Duck Typing”?

Tulis kode polimorfik yang dapat bekerja dengan objek kompatibel apa pun. Kamu berlatih Python Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Python Academy?

Tidak diperlukan pengalaman sebelumnya. Python Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Polimorfisme dan Duck Typing” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Python Academy ini?

Ya. Setiap pelajaran Python Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Pewarisan Tunggal
  2. Penggantian Method dan super()
  3. Pewarisan Ganda dan MRO
  4. Polimorfisme dan Duck Typing
← Kembali ke Python Academy