Python merupakan bahasa yang telah berorientasi objek (Object Oriented) sejak bahasa Python dibuat, jadi untuk memahami dan menggunakan konsep OOP pada Python benar benar mudah, jika teman-teman sudah paham dengan konsep OOP (Object Oriented Programming). Jika belum pernah dengar konsep OOP, teman-teman bisa pelajari terlebih dahulu konsep dasar pemrograman berorientasi object (OOP).
Syarat dapat disebut sebuah objek adalah memiliki properties dan methods (perilaku). _Properties (atribut) adalah semacam identitas atau variabel dari suatu object (class), sedangkan methods adalah kemampuan atau fitur dari class tersebut.
Dapat kita simpulkan bahwa Objek / Class adalah gabungan dari beberapa properties dan beberapa methods. Maka dari itu semua hal yang ada di dalam bahasa Python adalah objek. Bahkan sebuah fungsi di dalam Python juga merupakan sebuah objek / class.
Bagaimana hal ini bisa terjadi???
Kalau kita lihat lebih teliti, setiap fungsi yang kita buat di dalam bahasa Python memiliki atribut / property __doc__
yang menjadi bukti bahwa fungsi sekalipun di dalam Python adalah sebuah objek.
>>> def halo():
... print("hallo")
...
>>> type(halo)
<class 'function'>
Dari baris kode di atas dapat dilihat bahwa fungsi halo
yang kita buat adalah sebuah objek dari class
dengan nama function
.
1. Membuat Class Pada Python
Pada Python untuk membuat sebuah class menggunakan keyword class
kemudian di ikuti dengan nama class yang ingin di definisikan dan :
.
class ClassName:
# definisi properties dan methods
Contohnya kita akan membuat sebuah class untuk hewan dengan nama Animal
maka kita dapat membuatnya seperti berikut:
class Animal:
pass
Hewan memiliki usia dan warna hal ini disebut sebagai properties:
class Animal:
# Definisi Properties yang ada di dalam class Animal
color = None
age = None
feet = None
Hewan juga memiliki kemampuan / perilaku seperti makan, berjalan dan tidur yang di dalam OOP dengan methods :
class Animal:
# Definisi Properties yang ada di dalam class Animal
color = None
age = None
# Definisi Methods yang ada di dalam class Animal
def walk(self):
pass
def eat(self):
pass
def sleep(self):
pass
Dari class yang telah kita buat, kita dapat membuat beberapa objek. Misalnya kita akan membuat 3 buah objek yang bernama cat
, dog
dan rabbit
.
class Animal:
# Definisi Properties yang ada di dalam class Animal
color = None
age = None
# Definisi Methods yang ada di dalam class Animal
def walk(self):
pass
def eat(self):
pass
def sleep(self):
pass
# membuat objek cat
cat = Animal()
cat.color = "gray"
cat.age = "1 year"
# membuat objek dog
dog = Animal()
dog.color = "black"
dog.age = "2 year"
# membuat objek rabbit
rabbit = Animal()
rabbit.color = "white"
rabbit.age = "1 year"
2. Constructor
Constructor adalah sebuah fungsi yang akan dipanggil pertama kali ketika sebuah objek di instantiasi-kan atau dibuat. Di dalam bahasa Python fungsi constructor harus selalu bernama __init__()
.
Mari kita lihat contohnya.
class Animal:
# Constructor function
def __init__(self, age, color):
self.age = age
self.color = color
# Definisi Methods yang ada di dalam class Animal
def walk(self):
pass
def eat(self):
pass
def sleep(self):
pass
def info(self):
print(f'Age: {self.age}, Color: {self.color}')
Ketika membuat objek dari class Animal
maka wajib mengirimkan dua buah parameter yang kita definisikan pada constructor yaitu age
dan color
.
cat = Animal(age="1 Year", color="gray")
cat.info()
dog = Animal("2 Year", "black")
dog.info()
rabbit = Animal("1 Year", "white")
rabbit.info()
Output dari program di atas adalah:
Age: 1 Year, Color: gray
Age: 2 Year, Color: black
Age: 1 Year, Color: white
Ketika sebuah objek dibuat maka fungsi __init__
akan dijalankan pertama sekali, baris kode di atas akan memasukkan parameter yang diberikan yaitu age
dan color
di assign ke dalam local variable / property dari class Animal
.
3. Encapsulation
Konsep enkapsulasi adalah membuat barrier atau penghalang untuk membatasi atribut di dalam class dari dunia luar. Hal ini bertujuan agar atribut di dalam class tidak dapat diakses dari luar class sesuka hati.
Pada python untuk mengimplementasikan enkapsulasi ini cukup dengan menambahkan __
sebelum nama properti yang ingin dibatasi.
Mari kita lihat contohnya ketika sebelum implementasi enkapsulasi:
class Animal:
feet = 2
cat = Animal()
print(f"Jumlah Kaki: {cat.feet}")
cat.feet = 4
print(f"Jumlah Kaki: {cat.feet}")
Output dari baris kode di atas adalah:
Jumlah Kaki: 2
Jumlah Kaki: 4
Dapat dilihat bahwa properti feet dapat di akses dan diubah nilainya dari objek yang telah dibuat bukan???
Berikutnya mari kita lihat bagaimana setelah enkapsulasi diimplementasikan:
class Animal:
__feet = 2
cat = Animal()
print(f"Jumlah Kaki: {cat.__feet}")
cat.__feet = 4
print(f"Jumlah Kaki: {cat.__feet}")
Berikut output dari baris kode di atas ketika dijalankan.
Traceback (most recent call last):
File "main.py", line 5, in <module>
print(f"Jumlah Kaki: {cat.__feet}")
AttributeError: 'Animal' object has no attribute '__feet'
Error??? Yups...program akan error karena class Animal
tidak mengekspose properti feet
yang ada di dalamnya sehingga properti tersebut tidak dapat di akses ataupun mengubah nilainya dari luar.
4. Inheritance
Inheritance atau pewarisan adalah menurunkan karakteristik yang ada pada parent class kepada child class atau kelas yang diturunkan. Pewarisan ini bekerja layaknya orang tua yang mewariskan sifat-sifatnya kepada anak-anak mereka. Mari kita lihat contohnya.
# Parent class: Animal
class Animal:
def eat(self):
print("Sedang makan...\n")
# Child class Cat, mewariskan karakteristik dari class Animal
class Cat(Animal):
def run(self):
print("Sedang berlari...")
# Child class Bird, mewariskan karakteristik dari class Animal
class Bird(Animal):
def fly(self):
print("Sedang terbang...")
# Membuat objek cat
cat = Cat()
cat.run()
cat.eat()
# Membuat objek bird
bird = Bird()
bird.fly()
bird.eat()
Outputnya adalah sebagai berikut:
Sedang berlari...
Sedang makan...
Sedang terbang...
Sedang makan...
Kedua objek yaitu bird
dan cat
memiliki cara bergerak sendiri, kucing berjalan sedangkan burung terbang. Tetapi kedua objek tersebut mewarisi satu karakteristik dari parent class nya Animal
yaitu eat
, masing-masing objek tersebut dapat memanggil fungsi eat()
walaupun kita tidak membuatnya di dalam objek tersebut masing-masing, hal ini karena adanya inheritance atau pewarisan dari parent class.
5. Abstraction
Konsep dari abstraksi adalah menyembunyikan detail implementasi dari suatu class atapun method dan hanya mengekspose hal-hal yang penting untuk digunakan. Contohnya kita cukup perlu tau bahwa seekor hewan punya sebuah perilaku yaitu makan, tetapi kita tidak harus tau bagaimana sistem pencernaan kucing tersebut bekerja secara detail, karena sistem pencernaan kucing, burung atau ular pasti berbeda.
Mari kita lihat contohnya dalam bahasa Python.
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def say(self):
pass
class Cat(Animal):
def say(self):
print("Miauw")
class Cow(Animal):
def say(self):
print("Mooooooo")
cat = Cat()
cat.say()
cow = Cow()
cow.say()
Output dari program di atas seperti berikut.
Miauw
Mooooooo
Class Animal
memiliki sebuah method yaitu say
(bersuara) yang merupakan sebuah abstract method, kita tidak perlu tau bagaimana cara hewan bersuara, karena suara hewan berbeda-beda, contohnya suara kucing akan berbeda dengan suara sapi. Dengan menggunakan abstraction kita dapat mengimplementasikan suara yang berbeda pada tiap hewan.
6. Polymorphism
Polymorphism adalah dimana suatu methods memiliki banyak bentuk. Mari kita lihat contoh sederhana terkait implementasi polymorphism pada Python.
class Cat():
def can_fly(self):
print("Kucing tidak bisa terbang")
class Bird():
def can_fly(self):
print("Burung bisa terbang")
# Method yang memiliki banyak bentuk
def fly(Animal):
Animal.can_fly()
# membuat objek cat dan bird
cat = Cat()
bird = Bird()
fly(cat)
fly(bird)
Output dari baris kode di atas adalah seperti berikut:
Kucing tidak bisa terbang
Burung bisa terbang
Itulah sedikit pembahasan yang dapat kita pelajari terkait dengan penerapan Object Oriented Programming (OOP) pada bahasa pemrograman python. Semoga bermanfaat, dan semangat terus untuk belajar...
Sampai jumpa di artikel-artikel selanjutnya 😃