Polymorphism¶
Kata "polimorfisme" berarti "banyak bentuk", dan dalam pemrograman mengacu pada metode/fungsi/operator dengan nama yang sama yang dapat dieksekusi pada banyak objek atau kelas.
Function Polymorphism¶
Contoh fungsi Python yang dapat digunakan pada berbagai objek adalah fungsi len().
String¶
Untuk string, len() mengembalikan jumlah karakter:
x = "Hello World!"
print(len(x)) # 12
Tuple¶
Untuk tupel len() mengembalikan jumlah item dalam tupel:
mytuple = ("apple", "banana", "cherry")
print(len(mytuple)) # 3
Dictionary¶
Untuk kamus len() mengembalikan jumlah pasangan kunci/nilai dalam kamus:
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
print(len(thisdict)) #3
Class Polymorphism¶
Polimorfisme sering digunakan dalam metode Kelas, di mana kita dapat memiliki beberapa kelas dengan nama metode yang sama.
Misalnya, katakanlah kita memiliki tiga kelas: Mobil, Perahu, dan Pesawat, dan semuanya memiliki metode yang disebut move():
# Different classes with the same method:
class Car:
def __init__(self, brand, model):
self.brand = brand
self.model = model
def move(self):
print("Drive!")
class Boat:
def __init__(self, brand, model):
self.brand = brand
self.model = model
def move(self):
print("Sail!")
class Plane:
def __init__(self, brand, model):
self.brand = brand
self.model = model
def move(self):
print("Fly!")
car1 = Car("Ford", "Mustang") #Create a Car object
boat1 = Boat("Ibiza", "Touring 20") #Create a Boat object
plane1 = Plane("Boeing", "747") #Create a Plane object
for x in (car1, boat1, plane1):
x.move()
# Drive!
# Sail !
# Fly!
Perhatikan perulangan for di akhir. Karena polimorfisme, kita dapat mengeksekusi metode yang sama untuk ketiga kelas.
Inheritance Class Polymorphism¶
Bagaimana dengan kelas yang memiliki kelas turunan dengan nama yang sama? Bisakah kita menggunakan polimorfisme di sana?
Ya. Jika kita menggunakan contoh di atas dan membuat kelas induk bernama Kendaraan, dan membuat kelas turunan Mobil, Perahu, Pesawat dari Kendaraan, kelas turunan tersebut mewarisi metode Kendaraan, tetapi dapat menimpanya:
# Create a class called Vehicle and make Car, Boat, Plane child classes of Vehicle:
class Vehicle:
def __init__(self, brand, model):
self.brand = brand
self.model = model
def move(self):
print("Move!")
class Car(Vehicle):
pass
class Boat(Vehicle):
def move(self):
print("Sail!")
class Plane(Vehicle):
def move(self):
print("Fly!")
car1 = Car("Ford", "Mustang") #Create a Car object
boat1 = Boat("Ibiza", "Touring 20") #Create a Boat object
plane1 = Plane("Boeing", "747") #Create a Plane object
for x in (car1, boat1, plane1):
print(x.brand)
print(x.model)
x.move()
Kelas anak mewarisi properti dan metode dari kelas induk.
Pada contoh di atas, Anda dapat melihat bahwa kelas Car kosong, tetapi mewarisi brand, model, dan move() dari Vehicle.
Kelas Boat dan Plan juga mewarisi brand, model, dan move() dari Vehicle, tetapi keduanya menimpa metode move().
Karena polimorfisme, kita dapat mengeksekusi metode yang sama untuk semua kelas.