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.

Coba di Editor

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.

polymorphism_demo.py
Coba di Editor
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))
Keluaran Terminal
Calculated Area: 16.00
Calculated Area: 28.27

Implementasi 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

Sumber Daya Python yang Direkomendasikan

Perluas pengetahuan Anda dengan tutorial interaktif terkait, lembar contekan, dan perbandingan kode.