Dalam membuat program Artificial Intelligence (AI) atau Machine Learning (ML) kita sering berhadapan dengan tantangan yang rumit, seperti misalnya membuat bagaimana agent AI kita bisa belajar cara melakukan suatu tugas yang kompleks. Untuk bisa menyelesaikan permasalahan yang kompleks, maka perlu pendekatan dan teknik yang advanced (mahir) pula.
Membuat program ML dalam konteks supervised dan unsupervised learning relatif lebih mudah dibandingkan dengan reinforcement learning (RL). Dalam program RL, agen kita sering berinteraksi dengan lingkungan luar dan banyak objek lainnya. Dalam hal ini, diperlukan suatu teknik bagaimana caranya agar agen kita sebagai suatu entitas (sebuah unit) bisa berinteraksi dengan unit lainnya. Dengan kata lain, objek bisa berinteraksi dengan banyak objek lainnya. Oleh karena itu, dalam bahasa Python solusi untuk mengatasi masalah ini adalah dengan teknik OOP (Object Oriented Programming).
Di Python semuanya adalah objek. Yang saya maksud dengan semua di sini adalah benar-benar semua. Ya semua yang ada di Python adalah benar-benar objek. Lalu apa itu objek?
Objek dalam python sama halnya dengan objek di dunia nyata. Ia seperti benda yang berwujud, semisal kompor yang bisa memasak air, ia pun juga bisa dinyalakan dan dimatikan. Rumah juga merupakan objek, ia bisa kita tambahkan objek lain sehingga rumahnya semakin besar, ia pun juga bisa kita rombak sesuai keinginan kita.
Objek dalam python didefinisikan dalam sketsa/rancangan yang disebut dengan istilah class. Ia berlaku seperti sebuah blueprint yang bisa kita tambahkan isinya. Dengan demikian, sebuah class juga memiliki beberapa objek (instances) di dalamnya.
Berikut kita akan belajar tentang cara membuat class Kompor untuk memasak, sekaligus memahami konsep dasar OOP.
1. MENDEFINISIKAN CLASS
Untuk mendefinisikan sebuah class dengan nama Kompor perintahnya adalah
# Perintah di Python 2.x class Kompor(object): # Perintah di Python 3.x class Kompor:
Bisa dilihat bahwa sangat mudah mendefinisikan sebuah class. Perbedaan menonjol hanyalah jika di Python versi 2, maka setelah class kita harus menuliskan object di dalam sebuah kurung, sementara di versi 3 hal ini tidak diperlukan. Efeknya sama saja, di Python 3 kita tidak perlu menuliskan object lagi, dan ini sudah menjadi default. Namun jika tetap kita tuliskan object di Python 3, hal ini juga tidak masalah.
2. MENAMBAHKAN OBJEK DI DALAM SEBUAH CLASS
class Kompor(object): def __init__(self, merek, harga): self.merek = merek self.harga = harga self.nyala = False def menyalakan(self): self.nyala = True
Script di atas memiliki 2 methods, yaitu __init__ dan menyalakan. Method adalah sebuah fungsi yang didefinisikan di sebuah class.
- Method __init__ digunakan untuk mendefinisikan attributes yang ada di dalamnya. Method __init__ hanya boleh ada satu kali untuk setiap class nya.
- Method menyalakan dalam konteks ini digunakan untuk menyalakan kompornya.
Untuk mendefinisikan method, maka harus diikuti oleh attributes yang diperlukan, dan penulisannya dikutip dengan tanda kurung. Misal untuk mendefinisikan __init__ diikuti oleh2 attributes yaitu self, merek, dan harga. Self selalu ada dalam definisi method sehingga tidak perlu dihitung.
Apa itu self? Self digunakan untuk mereferensikan ke class nama dari object class itu sendiri. Semoga tidak bingung ya. Misal begini, jika saya tulis:
Kompor1 = Kompor("Rinnai", 250000)
Artinya saya ingin membuat sebuah objek dengan nama Kompor1. Objek ini memiliki merek yaitu Rinnai, dan objek ini harganya adalah Rp 250.000,-. Perlu diperhatikan bahwa self tidak perlu kita tulis lagi saat mendefinisikan Kompor1. Lalu bagaimana cara memakai objek Kompor1? Misal jika saya tulis:
print(Kompor1.merek) print(Kompor1.harga)
Maka akan menghasilkan
- baris 1 = Rinnai
- baris 2 = 250000
Jadi ketika kita tuliskan Kompor1.harga, pada dasarnya Python tidak tahu bahwa objeknya bernama Kompor1. Untuk bisa tahu maka ia harus mereferensikan dirinya ke nama objek saat ia didefinisikan, yaitu saat kita tulis Kompor1 = Kompor(“Rinnai”, 250000). Jadi dalam konteks ini yang terjadi adalah self = Kompor1. Dengan demikian, untuk pemahaman jika kita tulis Kompor1.harga sebenarnya sama saja dengan self.harga. Mudah bukan.
Semoga penjelasan di atas bisa membuat pembaca mengerti tentang self. Jika belum, melalui praktek, pembaca bisa lebih mudah lagi memahaminya.
3. ATTRIBUTES DALAM SEBUAH METHOD (FUNGSI)
Attributes adalah item-item dalam sebuah method (fungsi). Item-item ini bisa dipakai setiap class tersebut dieksekusi (dipanggil). Dalam class Kompor dan method __init__, kita bisa lihat ada 3 attributes (kecuali self):
- merek : menjelaskan merek dari objek yang didefinisikan
- harga : menjelaskan harga dari objek yang didefinisikan
- nyala : menjelaskan status bahwa Kompor kita default-nya dalam kondisi OFF (nyala=FALSE).
Penulisan self.merek = merek artinya apapun nama merek yang kita tentukan, akan menjadi mereknya. Kemudian, penulisan self.harga = harga berarti bahwa apapun harga yang kita definisikan, akan menjadi harga untuk objek tersebut pula.
Sekarang kita coba tulis secara utuh seperti ini:
class Kompor(object): def __init__(self, merek, harga): self.merek = merek self.harga = harga self.nyala = False def menyalakan(self): self.nyala = True Kompor1 = Kompor("Rinnai", 250000) Kompor2 = Kompor("Quantum", 500000) print("Kompor yang kita miliki: {} = {}, {} = {}".format(Kompor1.merek, Kompor1.harga, Kompor2.merek, Kompor2.harga))
Hasil eksekusinya adalah sebagai berikut:
Kompor yang kita miliki: Rinnai = 250000, Quantum = 500000
4. BERMAIN DENGAN METHOD
Sekarang kita coba menyalakan kompor Rinnai. Penulisannya adalah sebagai berikut:
print(Kompor1.nyala) Kompor1.menyalakan() print(Kompor1.nyala)
- Jika line 1 dieksekusi, akan menghasilkan False.
- Line 2 dieksekusi, akan menjalankan method menyalakan, sehingga Kompor1 menjadi menyala.
- Line 3 akan menghasilkan nilai True, karena sekarang kompornya sudah menyala.
5. MENDEFINISIKAN ATTRIBUTE DI LUAR DEFINISI CLASS
Misal kita ingin menambahkan attribute untuk Kompor1, misal garansi, maka kita juga bisa mendefinisikannya di luar pendefinisian class. Misal jika kita tulis:
Kompor1.garansi = 3 print(Kompor1.garansi) print(Kompor2.garansi)
Jika kita eksekusi, maka:
- Line 1 akan memberikan attribute baru garansi dengan nilain 3 untuk Kompor1 saja.
- Line2 akan memunculkan nilai 3.
- Line 3 akan memberikan error ‘Kompor’ object has no attribute ‘garansi’, karena memang attribute garansi tidak kita definisikan saat kita mendefinisikan class Kompor. Sehingga dalam konteks ini, attribute garansi menjadi ekslusif milik Kompor1 saja.
6. MENDEFINISIKAN ATTRIBUTE GLOBAL SEBUAH CLASS
Berbeda dengan attribute yang kita definisikan di method __init__, maka attribute global bisa selalu dipakai saat kita menggunakan class tersebut. Dengan kata lain, saat kita mendefinisikan attributes dalam method __init__, maka attribute ini hanya berlaku untuk objek itu saja. Misal Kompor1 = Kompor(“Rinnai”, 250000), maka attribute Rinnai dan 250000 adalah pasangan. Namun jika kita tulis:
class Kompor(object): sumber_energi = "gas" def __init__(self, merek, harga): self.merek = merek self.harga = harga self.nyala = False def menyalakan(self): self.nyala = True Kompor1 = Kompor("Rinnai", 250000) Kompor2 = Kompor("Quantum", 500000)
Maka class Kompor memiliki attribute global sumber_energi dengan nilai default-nya adalah gas.
Jika kita eksekusi:
print(Kompor.sumber_energi) Kompor1.sumber_energi = "listrik" print(Kompor1.sumber_energi) print(Kompor2.sumber_energi)
- Line 1 akan mengeluarkan nilai gas, karena yang kita panggil adalah sumber_energi untuk class Kompor itu sendiri.
- Line 2 adalah perintah untuk mendefinisikan sumber_energi untuk Kompor1 sebagai listrik.
- Line 3 akan mengeluarkan nilai listrik (karena sudah dirubah di line 2).
- Line 4 akan mengeluarkan nilai gas (default sumber_energi class Kompor adalah gas).
Demikian konsep dasar dari OOP (Object Oriented Programming) di Python. Tentu saja masih ada beberapa teknik OOP yang lebih advanced yang akan saya bahas di kesempatan selanjutnya. Semoga pembahasan OOP ini bisa membantu pembaca untuk memahami bahasa ML yang melibatkan OOP, khususnya saat membahas RL (Reinforcement Leaning).
Terus semangat belajar AI, dan nantikan terus artikel AI dan ML dari saya.
Terima kasih.
terimakasih atas informasinya
Ma syaa Allah, Jazaakallahu khoyron Pak Bagus.