Menguasai Pemrograman Berorientasi Objek Python: Kelas, Warisan, Enkapsulasi & Polimorfisme
Pemrograman Berorientasi Objek Python
Panduan ini membimbing Anda melalui konsep inti Pemrograman Berorientasi Objek (OOP) Python, lengkap dengan contoh praktis yang mengilustrasikan cara membangun kode yang kuat dan dapat digunakan kembali.
Video: Object-Oriented Programming in Python
Pemrograman Berorientasi Objek
Python adalah bahasa multi-paradigma yang mendukung beberapa gaya pemrograman. Salah satu pendekatan paling kuat adalah memodelkan masalah menggunakan objek—pendekatan yang dikenal sebagai Pemrograman Berorientasi Objek (OOP).
Sebuah objek memiliki dua karakteristik penting:
- Attributes (data)
- Behavior (methods)
Misalnya, seekor beo adalah objek dengan atribut seperti name, age, dan color, dan perilaku seperti sing() dan dance().
OOP di Python mempromosikan kode yang dapat digunakan kembali, mengikuti prinsip DRY (Don’t Repeat Yourself).
Class
Sebuah class adalah cetak biru yang mendefinisikan struktur dan perilaku objek. Bayangkan sebagai sketsa rinci seekor beo: ini menentukan properti dan tindakan apa yang bisa dimiliki beo.
class Parrot:
pass
Di sini, Parrot adalah kelas kosong. Instance dari kelas ini dibuat nanti.
Object
Sebuah object (atau instance) adalah realisasi konkret dari sebuah kelas. Saat kelas didefinisikan, tidak ada memori yang dialokasikan; hanya templat yang ada. Instantiasi kelas menciptakan objek.
obj = Parrot()
Dalam contoh di bawah, kita membangun kelas Parrot yang fungsional dan membuat dua instance, blu dan woo:
class Parrot:
# Class attribute
species = "bird"
# Instance attributes
def __init__(self, name, age):
self.name = name
self.age = age
# Instantiate the class
blu = Parrot("Blu", 10)
woo = Parrot("Woo", 15)
# Access class attributes
print("Blu is a {}".format(blu.__class__.species))
print("Woo is also a {}".format(woo.__class__.species))
# Access instance attributes
print("{} is {} years old".format(blu.name, blu.age))
print("{} is {} years old".format(woo.name, woo.age))
Output
Blu is a bird Woo is also a bird Blu is 10 years old Woo is 15 years old
Dalam cuplikan ini, species adalah atribut kelas yang dibagi oleh semua beo, sedangkan name dan age adalah atribut instance yang unik untuk setiap objek.
Metode
Metode adalah fungsi yang didefinisikan di dalam kelas yang menggambarkan perilaku objek. Mereka dipanggil pada instance kelas.
class Parrot:
def __init__(self, name, age):
self.name = name
self.age = age
def sing(self, song):
return f"{self.name} sings {song}"
def dance(self):
return f"{self.name} is now dancing"
# Instantiate and use methods
blu = Parrot("Blu", 10)
print(blu.sing("'Happy'"))
print(blu.dance())
Output
Blu sings 'Happy' Blu is now dancing
Warisan
Warisan memungkinkan kelas baru mewarisi atribut dan metode dari kelas yang sudah ada, mempromosikan penggunaan kembali kode dan hierarki logis.
# Base class
class Bird:
def __init__(self):
print("Bird is ready")
def whoisThis(self):
print("Bird")
def swim(self):
print("Swim faster")
# Derived class
class Penguin(Bird):
def __init__(self):
super().__init__()
print("Penguin is ready")
def whoisThis(self):
print("Penguin")
def run(self):
print("Run faster")
peggy = Penguin()
peggy.whoisThis()
peggy.swim()
peggy.run()
Output
Bird is ready Penguin is ready Penguin Swim faster Run faster
Enkapsulasi
Enkapsulasi membatasi akses langsung ke kondisi internal objek, melindungi integritas data. Di Python, atribut pribadi ditandai dengan garis bawah di depan (tunggal atau ganda).
class Computer:
def __init__(self):
self.__maxprice = 900
def sell(self):
print(f"Selling Price: {self.__maxprice}")
def setMaxPrice(self, price):
self.__maxprice = price
c = Computer()
c.sell() # Attempt to modify directly
c.__maxprice = 1000
c.sell() # Use setter method
c.setMaxPrice(1000)
c.sell()
Output
Selling Price: 900 Selling Price: 900 Selling Price: 1000
Polimorfisme
Polimorfisme memungkinkan objek dari kelas yang berbeda diperlakukan melalui antarmuka yang sama, memungkinkan kode fleksibel yang dapat beroperasi pada berbagai tipe objek.
class Parrot:
def fly(self):
print("Parrot can fly")
def swim(self):
print("Parrot can't swim")
class Penguin:
def fly(self):
print("Penguin can't fly")
def swim(self):
print("Penguin can swim")
# Common interface
def flying_test(bird):
bird.fly()
blu = Parrot()
peggy = Penguin()
flying_test(blu)
flying_test(peggy)
Output
Parrot can fly Penguin can't fly
Key Takeaways
- OOP mengstruktur kode untuk kejelasan dan kemudahan pemeliharaan.
- Kelas memungkinkan penggunaan kembali kode melalui warisan.
- Enkapsulasi melindungi data internal.
- Polimorfisme menawarkan antarmuka yang fleksibel di seluruh tipe objek.