Python OOP : Class dan Object Pada Python

Estimated: 6 min read
Python OOP : Class dan Object Pada Python

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 😃

Comments

Mohon sertakan informasi yang detail saat bertanya tentang eror, seperti: pesan error, log, dan screenshot.