Python - Polimorfisme: Panduan untuk Pemula

Halo there, masa depan para maestro Python! Hari ini, kita akan memulai perjalanan yang menarik ke dunia polimorfisme di Python. Jangan khawatir jika kata ini terdengar seperti sebuah spell dari Harry Potter - pada akhir tutorial ini, kamu akan mengendalikan polimorfisme seperti seorang pro!

Python - Polymorphism

Apa itu Polimorfisme di Python?

Bayangkan jika kamu memiliki tongkat ajaib (tunggu, kita akan sepenuhnya ke Hogwarts ini). Tongkat ini dapat berubah menjadi objek yang berbeda - kadang-kadang itu sebuah pensil, kadang-kadang itu sebuah pedang, dan kadang-kadang itu sebuah lampu penyinar. Itulah esensi dari apa itu polimorfisme dalam pemrograman!

Di Python, polimorfisme memungkinkan objek dari kelas yang berbeda untuk diperlakukan sebagai objek dari kelas dasar yang umum. Itu seperti memiliki pisau lipat Swiss Army dari kode - satu antarmuka, banyak implementasi.

Ayo lihat contoh sederhana:

class Animal:
def speak(self):
pass

class Dog(Animal):
def speak(self):
return "Woof!"

class Cat(Animal):
def speak(self):
return "Meow!"

def animal_sound(animal):
print(animal.speak())

# Membuat objek
dog = Dog()
cat = Cat()

# Menggunakan polimorfisme
animal_sound(dog)  # Output: Woof!
animal_sound(cat)  # Output: Meow!

Dalam contoh ini, baik Dog dan Cat adalah turunan dari kelas Animal. Fungsi animal_sound tidak peduli dengan jenis hewan yang diterimanya - dia hanya memanggil metode speak. Ini adalah polimorfisme dalam aksi!

Cara Mengimplementasikan Polimorfisme di Python

Python menawarkan beberapa cara untuk mengimplementasikan polimorfisme. Ayo telusuri mereka satu per satu:

Duck Typing di Python

Duck typing adalah konsep di Python yang fokus pada perilaku suatu objek dari jenisnya. Seperti ungkapan itu, "Jika itu terlihat seperti bebek, berenang seperti bebek, dan berkokok seperti bebek, maka itu kemungkinan besar adalah bebek."

Berikut adalah contohnya:

class Duck:
def quack(self):
print("Quack, quack!")

class Person:
def quack(self):
print("Saya menyamar menjadi bebek!")

def make_it_quack(thing):
thing.quack()

# Membuat objek
duck = Duck()
person = Person()

# Menggunakan duck typing
make_it_quack(duck)    # Output: Quack, quack!
make_it_quack(person)  # Output: Saya menyamar menjadi bebek!

Dalam contoh ini, make_it_quack tidak peduli dengan jenis objek yang diterimanya. Selama objek memiliki metode quack, itu akan bekerja.

Method Overriding di Python

Method overriding adalah saat kelas turunan menyediakan implementasi spesifik untuk metode yang sudah didefinisikan dalam kelas dasarnya. Itu seperti memberi tahu orang tua kamu, "Saya tahu kamu melakukan ini begitu, tapi saya akan melakukan itu seperti saya!"

Berikut adalah contohnya:

class Vehicle:
def move(self):
print("Saya bergerak!")

class Car(Vehicle):
def move(self):
print("Saya mengemudi di atas jalan!")

class Boat(Vehicle):
def move(self):
print("Saya menglayar di atas air!")

# Membuat objek
vehicle = Vehicle()
car = Car()
boat = Boat()

# Menggunakan method overriding
vehicle.move()  # Output: Saya bergerak!
car.move()      # Output: Saya mengemudi di atas jalan!
boat.move()     # Output: Saya menglayar di atas air!

Dalam contoh ini, baik Car dan Boat menimpa metode move kelas Vehicle dengan implementasi spesifik mereka.

Overloading Operator di Python

Python memungkinkan kamu untuk menentukan bagaimana operator berperilaku ketika diterapkan ke objek kelas kustom kamu. Ini disebut operator overloading.

Berikut adalah contohnya:

class Point:
def __init__(self, x, y):
self.x = x
self.y = y

def __add__(self, other):
return Point(self.x + other.x, self.y + other.y)

def __str__(self):
return f"({self.x}, {self.y})"

# Membuat objek
p1 = Point(1, 2)
p2 = Point(3, 4)

# Menggunakan operator overloading
p3 = p1 + p2
print(p3)  # Output: (4, 6)

Dalam contoh ini, kita telah menimpa operator + untuk kelas Point kita dengan mendefinisikan metode __add__.

Method Overloading di Python

Tidak seperti beberapa bahasa lain, Python tidak mendukung method overloading dalam pengertian tradisional. Namun, kita dapat mencapai fungsionalitas yang serupa menggunakan argumen default atau argumen dengan panjang yang berubah.

Berikut adalah contohnya:

class Calculator:
def add(self, *args):
return sum(args)

# Membuat objek
calc = Calculator()

# Menggunakan method overloading-like functionality
print(calc.add(1, 2))        # Output: 3
print(calc.add(1, 2, 3))     # Output: 6
print(calc.add(1, 2, 3, 4))  # Output: 10

Dalam contoh ini, metode add kita dapat mengambil jumlah argumen apa pun, menyimulasi method overloading.

Tabel Metode Polimorfisme

Berikut adalah tabel yang ringkasan metode polimorfisme yang telah kita diskusikan:

Metode Deskripsi Contoh
Duck Typing Fokus pada perilaku objek dari jenisnya make_it_quack(thing)
Method Overriding Kelas turunan menyediakan implementasi spesifik untuk metode yang didefinisikan dalam kelas dasarnya Car.move() menimpa Vehicle.move()
Operator Overloading Menentukan bagaimana operator berperilaku untuk kelas kustom Menimpa + untuk kelas Point
Method Overloading-like Menggunakan argumen default atau argumen dengan panjang yang berubah untuk menyimulasi method overloading Calculator.add(*args)

Dan itu semua, teman-teman! Kamu baru saja mengambil langkah pertama kamu ke dunia yang menakjubkan dari polimorfisme di Python. Ingat, praktek membuat perfect, jadi jangan takut untuk bereksperimen dengan konsep ini di kode kamu sendiri. Sebelum kamu sadar, kamu akan membentuk kode kamu seperti seorang pemahat master, membuat program yang elegan dan fleksibel yang akan membuat Michelangelo iri hati!

Selamat coding, dan may the polymorphism be with you!

Credits: Image by storyset