Polimorfisme OOP Python: Pengetikan dan Antarmuka Bebek
Kuasai polimorfisme dengan Python. Pelajari cara menulis kode yang fleksibel dan digabungkan secara longgar menggunakan pengetikan bebek, penggantian metode, dan kelas dasar abstrak.
Ikhtisar
Polimorfisme adalah istilah Yunani yang berarti "banyak bentuk". Dalam Pemrograman Berorientasi Objek, ini mengacu pada kemampuan kelas yang berbeda untuk merespons pemanggilan metode yang sama dengan cara unik mereka sendiri. Polimorfisme memungkinkan Anda menulis satu fungsi yang dapat memproses berbagai jenis objek, asalkan objek tersebut berbagi antarmuka yang sama. Hal ini memungkinkan kopling rendah dan membuat sistem perangkat lunak Anda sangat mudah beradaptasi dan mudah diperluas.
Di Python, polimorfisme sangat terkait dengan konsep yang dikenal sebagai Duck Typing. Istilah tersebut berasal dari ungkapan: “Kalau berjalan seperti bebek dan berkuak seperti bebek, maka pastilah itu bebek.” Dalam Python yang diketik secara dinamis, suatu fungsi tidak peduli pada kelas apa suatu objek berada; ia hanya peduli apakah objek tersebut mengimplementasikan metode yang diminta. Misalnya, jika Anda memiliki fungsi yang memanggil `.speak()`, Anda dapat meneruskannya ke Anjing, Kucing, atau Robot—selama semuanya memiliki metode `.speak()`, kode akan berjalan dengan sempurna.
Untuk arsitektur yang lebih ketat, Python menyediakan Kelas Dasar Abstrak (ABC) melalui modul `abc` bawaan. Dengan mewarisi dari `abc.ABC` dan menggunakan dekorator `@abstractmethod`, Anda dapat menentukan antarmuka formal yang terpaksa diterapkan oleh kelas anak. Jika kelas anak gagal mendefinisikan metode abstrak, Python akan memunculkan TypeError saat Anda mencoba membuat instance-nya. Menyeimbangkan pengetikan bebek yang fleksibel dengan kelas abstrak formal adalah keterampilan utama untuk merancang perpustakaan Python yang tangguh.
Kode & Output Eksekusi
Menerapkan kelas polimorfik yang mewakili bentuk yang menghitung luasnya.
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
"""Must be implemented by subclasses."""
pass
class Square(Shape):
def __init__(self, side):
self.side = side
def area(self):
return self.side * self.side
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
import math
return math.pi * (self.radius ** 2)
# Polymorphic function accepting any Shape
def print_area(shape: Shape):
print(f"Calculated Area: {shape.area():.2f}")
print_area(Square(4))
print_area(Circle(3))Calculated Area: 16.00
Calculated Area: 28.27Implementasi Langkah demi Langkah
- Menulis pemroses pembayaran yang menangani objek CreditCard, PayPal, dan Stripe
- Menggambar berbagai elemen (Teks, Gambar) menggunakan loop render terpadu
- Mengejek koneksi API eksternal selama pengujian unit
Pertanyaan yang Sering Diajukan
Apa itu Mengetik Bebek?
Ini adalah pendekatan dinamis Python terhadap polimorfisme. Ia memeriksa keberadaan metode dan properti saat runtime daripada memverifikasi warisan dari kelas induk tertentu.
Bisakah Anda membuat instance Kelas Dasar Abstrak?
Tidak. Mencoba membuat instance kelas yang mewarisi ABC dan berisi metode abstrak akan memunculkan TypeError.
Topik Terkait
Pengenalan lengkap tentang kelas, objek, pewarisan, dan konsep OOP Python. Buat model data yang kuat dan skalakan aplikasi python Anda.
Warisan Python OOPPelajari warisan dengan Python OOP. Menguasai subkelas, mengganti metode, menggunakan super(), dan pola pewarisan berganda.
Sumber Daya Python yang Direkomendasikan
Perluas pengetahuan Anda dengan tutorial interaktif terkait, lembar contekan, dan perbandingan kode.
Cara Mengurutkan Daftar dengan Python
Pelajari cara mengurutkan daftar dengan Python menggunakan metode sortir() dan fungsi sortir(). Temukan contoh pengurutan kunci khusus dan urutan terbalik.
Lembar
Panduan referensi lengkap untuk manipulasi string Python. Kuasai pemformatan, pencarian, pemisahan, penggantian, dan pemeriksaan properti string.
Python vs JavaScript: Bahasa Pemrograman Mana yang Terbaik?
Perbandingan komprehensif antara Python dan JavaScript. Jelajahi perbedaan sintaksis, kinerja, kasus penggunaan (backend vs frontend), dan contoh pengkodean.