83
10. Pengenalan Class
Membuat Class dan Object
Pemrograman berorientasi objek atau dalam bahasa inggris dikenal dengan Object Oriented
Programming (OOP), merupakan sebuah paradigma pemrograman dimana kita memodelkan
perangkat lunak kita dari berbagai kumpulan objek yang saling berinteraksi. Objek tersebut
memiliki karakteristik dan aksi. Di dalam OOP, karakteristik tersebut berupa variabel yang
dinamakan atribut. Kemudian aksi yang dimiliki objek tersebut berupa method yang menghasilkan
output atau cuma melakukan aksi saja tanpa output. Ada istilah lain juga yang menyebut aksi
sebuah objek sebagai perilaku atau behaviour. Objek itu sendiri mempunyai template yang
diistilahkan dengan kelas atau class. Sebuah kelas merupakan template bagi objek – objek yang
akan dibuat. Proses pembuatan objek baru dinamakan dengan instansiasi.
Ada beberapa hal yang harus diingat dalam membuat sebuah kelas. Pertama keyword class,
keyword ini digunakan untuk mendefinisikan sebuah kelas. Disusul dengan nama kelas yang
diinginkan dan tanda titik dua. Blok kode kelas tersebut ditulis setelah tanda titik dua tersebut, dan
seperti biasa diperlukan indentasi agar blok kode yang kita tulis masuk kedalam blok kode kelas.
Kedua adalah konstruktor, di Python konstruktor ditulis dengan sebuah function bernama
__init__() . Method dan function sebenarnya sama, hanya saja beda istilah pada paradigma OOP.
Method __init__() ini merupakan method yang akan selalu dieksekusi saat instansiasi objek.
Biasanya __init__() digunakan untuk mengisi variabel dengan nilai awal pada atribut – atribut yang
dimiliki objek. Ketiga adalah keyword self, keyword tersebut digunakan pada method yang akan
dinyatakan sebagai method dari kelas yang kita rancang. Keyword ini disertakan di parameter
pertama. Jika method tersebut tidak disertakan self pada method yang dimiliki kelas tersebut, akan
muncul error : “TypeError: nama_function() takes exactly n arguments (1 given)
” yang artinya method tersebut tidak bisa dipanggil oleh objek yang telah terinstansiasi.
Sebagai contoh disini kita akan membuat sebuah kelas bernama PersegiPanjang yang memiliki dua
atribut yaitu panjang dan lebar. Kelas ini memiliki lima method yang terdiri dari :
__init__(), konstruktor kelas persegi panjang
hitung_luas(), method untuk menghitung luas persegi panjang
hitung_keliling(), method untuk menghitung keliling persegi panjang
gambar_persegi_panjang(), menggambar persegi panjang yang direpresentasikan dengan
kumpulan bintang.
gambar_persegi_panjang_tanpa_isi(), menggambar persegi panjang tetapi hanya batas
luarnya saja, isinya tak digambar.
listing : class_1.py
84
class PersegiPanjang:
def __init__(self, panjang, lebar):
[Link] = panjang
[Link] = lebar
def hitung_luas(self):
return [Link] * [Link]
def hitung_keliling(self):
return (2*[Link]) + (2*[Link])
def gambar_persegi_panjang(self):
for i in range(0, [Link]):
for j in range(0, [Link]):
print '*',
print ""
def gambar_persegi_panjang_tanpa_isi(self):
for i in range(0, [Link]):
if i > 0 and i < [Link]-1:
for j in range(0, [Link]):
if j > 0 and j < [Link]-1:
print ' ',
else:
print '*',
else:
for j in range(0, [Link]):
print '*',
print ""
PersegiPanjangA = PersegiPanjang(20, 10)
PersegiPanjangB = PersegiPanjang(10, 5)
print "Panjang persegi panjang A :", [Link]
print "Lebar persegi panjang A :", [Link]
print "Luas persegi panjang A : ", PersegiPanjangA.hitung_luas()
print "Keliling persegi panjang A : ", PersegiPanjangA.hitung_keliling()
print "Menggambar Persegi Panjang A : "
PersegiPanjangA.gambar_persegi_panjang()
print "\nMenggambar Persegi Panjang A hanya tepinya saja : "
PersegiPanjangA.gambar_persegi_panjang_tanpa_isi()
print "\n"
print "Panjang persegi panjang B :", [Link]
print "Lebar persegi panjang B :", [Link]
print "Luas persegi panjang B : ", PersegiPanjangB.hitung_luas()
85
print "Keliling persegi panjang B : ", PersegiPanjangB.hitung_keliling()
PersegiPanjangB.gambar_persegi_panjang()
print "\nMenggambar Persegi Panjang B hanya tepinya saja : "
PersegiPanjangB.gambar_persegi_panjang_tanpa_isi()
Proses instansiasi dilakukan dengan menentukan nama objek yang diinginkan kemudian panggil
nama kelas yang akan diinginkan dan masukan parameter awal yang dibutuhkan. Kemudian saat
objek berhasil dibuat, kita bisa mengakses atribut dan method dari objek tersebut. Seperti yang kita
lakukan pada manipulasi file, kita bisa mengakses method close(), write(), dan read() serta
mengakses atribut close, name, dan mode. Dengan parameter berbeda namun karakterisitik sama,
persegi panjang yang dihasilkan jadi beragam.
Tujuan dari OOP ini sendiri, menghemat penulisan kode program yang kita buat. Tanpa OOP kita
harus membuat atribut untuk setiap objek. Dan penulisan kode program pun menjadi menumpuk,
Karena untuk method yang sama harus di tulis ulang.
<< gambar 10.1 hasil eksekusi class_1.py bagian ke - 1 >>
86
<< gambar 10.2 hasil eksekusi class_1.py bagian ke - 2 >>
Mengenal Built-in Function pada Class dan Object
Berikutnya kita akan mengenal beberapa built-in class attribute yang akan bisa digunakan saat kita
membuat kelas apapun. Built-in class attribute akan selalu menyertai kelas yang kita rancang.
Berikut beberapa atribut yang bisa Anda gunakan untuk mengakses informasi dari sebuah kelas :
__doc__, digunakan untuk mengakses dokumentasi yang terdapat pada kelas
__name__, digunakan untuk mengakses nama kelas
__dict__, digunakan untuk mendapatkan namespace dari kelas tersebut. Kalau pada objek
yang sudah diinstansiasi method ini akan mengeluarkan informasi tentang atribut yang
sudah terisi nilai
__module__, digunakan untuk mendapatkan informasi dimana lokasi modul yang
mendefinisikan kelas tersebut
__bases__, digunakan untuk melihat darimana kelas tersebut diwariskan. Pewarisan pada
OOP adalah menggunakan karakteristik suatu kelas pada kelas yang ingin menggunakan
karakteristik kelas yang mewariskannya.
Sebagai contoh ada beberapa built-in class attribute yang bisa diakses kelas dan objek hasil
instansiasi dan ada yang hanya bisa diakeses kelas.
87
listing : class_2.py
class PersegiPanjang:
'''
Sebuah kelas yang memodelkan persegi panjang.
Mempunyai dua atribut yaitu panjang dan lebar.
Bisa menghitung luas dan keliling.
Bisa juga menggambar persegi panjang sesuai atribut
'''
def __init__(self, panjang, lebar):
[Link] = panjang
[Link] = lebar
def hitung_luas(self):
return [Link] * [Link]
def hitung_keliling(self):
return (2*[Link]) + (2*[Link])
def gambar_persegi_panjang(self):
for i in range(0, [Link]):
for j in range(0, [Link]):
print '*',
print ""
def gambar_persegi_panjang_tanpa_isi(self):
for i in range(0, [Link]):
if i > 0 and i < [Link]-1:
for j in range(0, [Link]):
if j > 0 and j < [Link]-1:
print '-',
else:
print '*',
else:
for j in range(0, [Link]):
print '*',
print ""
PersegiPanjangA = PersegiPanjang(20, 10)
print PersegiPanjang.__doc__
print PersegiPanjang.__name__
print PersegiPanjang.__dict__
print PersegiPanjang.__module__
print PersegiPanjang.__bases__
88
print PersegiPanjangA.__doc__
print PersegiPanjangA.__dict__
print PersegiPanjangA.__module__
Pada contoh diatas, atribut __name__ dan __bases__ hanya bisa diakses oleh kelas. Sedangkan
objek hasil instansiasi tidak bisa mengaksesnya.
<< gambar 10.3 hasil class_2.py >>
Pembahasan mengenai OOP ini tidak bisa dibahas secara keseluruhan dalam satu bab. Ada banyak
hal yang harus diulas seperi inheritance, polymorphism, abstract, overriding, overload, dan lain –
lain.
11. Pengenalan Module
89
Module dan Packages
Module adalah istilah file yang berisi kode Python. Jadi dari awal sebenarnya kita sudah membuat
module Python. Hanya saja pada konsep module ini, kode Python yang akan digunakan berulang
akan dipisahkan dari file utama ke dalam file lain yang khusus menampung kode Python tersebut.
Di dalam module kita bisa menyimpan class, function, variabel, dan struktur data yang bisa
digunakan oleh program. Misal kita ingin membuat sebuah kode yang hanya berisi jenis – jenis
segitiga seperti segitiga sama kaki, segitiga sembarang, segitiga sama sisi, dan segitiga siku – siku.
Kenapa tidak dicampur saja dengan jenis bidang yang lain ? Hal ini dilakukan agar kita mudah
dalam mengelola kode Python yang kita tulis. Contoh lainnya misal kita menulis kode yang
berinteraksi dengan database dan kode untuk melakukan proses penulisan laporan secara terpisah.
Dalam hal ini module mempunyai kode Python yang reusable agar kode yang ditulis pada program
kita terduplikasi. Sedangkan file Python yang akan dijalankan dan memanggil function, class, atau
variabel dari kumpulan module yang dibuat berisi runnable code. Kode yang dieksekusi oleh
interpreter Python untuk menampilkan wujud dari program yang dibuat.
Kemudian module – module yang sudah ditulis bisa dikelompokan kedalam sebuah package.
Package ini sendiri berupa folder yang memiliki file __init__.py, agar folder tersebut dikenali
sebagai module. Di dalam package ini module – module memiliki tujuan dan fungsional yang
seragam. Misal pada contoh yang akan kita coba, terdapat sebuah package bidang, yang berisi
module bidang segitiga dan persegi. Di dalamnya terdapat file __init__.py yang bertugas untuk me-
load semua module yang ada di dalam package, [Link] yang berisi class segitiga, dan
[Link] yang berisi class persegi. Di dalam file [Link] dan [Link] masing – masing bisa
diisi berbagai jenis bidang yang sesuai nama module tersebut. Hanya saja untuk contoh kali ini
dibatasi kepada satu jenis bidang saja
Membuat Module – Module di dalam Packages
Setelah memahami konsep module, mari kita coba program yang agak banyak ini. Sebelumnya di
direktori tempat kita akan menulis program, terlebih dahulu buatlah sebuah folder baru bernama
bidang. Folder tersebut merupakan package yang akan menyimpan [Link], [Link], dan
__init__.py.
listing : [Link]
class Persegi:
def __init__(self, s):
[Link] = s
def SetSisi(self, s):
[Link] = s
def GetSisi(self):
return [Link]
90
def HitungKeliling(self):
return 4 * [Link]
def HitungLuas(self):
return [Link] * [Link]
Kode [Link] diatas hanya bersegi class Persegi yang mempunyai atribut sisi dan method –
method-nya. Di dalam module ini kita bisa saja menulis kelas PersegiPanjang. Hal tersebut
memudahkan kita agar bidang yang jenisnya persegi tidak tercampur dengan bidang yang jenisnya
segitiga. Pastikan Anda menyimpan file [Link] di dalam folder bidang.
listing : [Link]
import math
class Segitiga:
def __init__(self, a, t):
[Link] = a
[Link] = t
def SetAlas(self, a):
[Link] = a
def GetAlas(self):
return [Link]
def SetTinggi(self, t):
[Link] = t
def GetTinggi(self):
return [Link]
def GetSisiMiring(self):
return [Link]([Link]**2 + [Link]**2)
def HitungKeliling(self, s):
return [Link] + [Link] + s
def HitungLuas(self):
return ([Link] * [Link]) / 2
Hampir sama dengan fungsi dari module [Link], hanya saja module [Link] akan diisi
berbagai jenis segitiga. Selain itu pada kode diatas kita memanggil module math karena saat nanti
module [Link] ini diload, kode yang menggunakan method – method pada math harus di load
juga dari module math. Pastikan module ini tersimpan di folder bidang.
91
listing : __init__.py
from segitiga import Segitiga
from persegi import Persegi
if __name__ == '__main__':
pass
Kemudian file yang mesti ada di dalam sebuah package adalah __init__.py. File tersebut berfungsi
untuk me-load isi module ke dalam memori agar isi module bisa digunakan di file yang berisi
runnable code. Pada kode diatas, terdapat sintaks : from segitiga import Segitiga. Keyword from
adalah keyword yang digunakan untuk menentukan package atau module mana yang akan kita
rujuk, sedangkan import digunakan untuk mengambil class, function atau variabel yang
didefinisikan di dalam module. Disana kita meng-import dua buah kelas yaitu Segitiga dan Persegi
dari dua module berbeda yaitu [Link] dan [Link]. Sedangkan kode dibawahnya digunakan
jika file __init__.py ingin menjalankan perintah tertentu. Pastikan file ini disimpan di folder bidang.
Menggunakan Module di File Utama
Sampai akhirnya kita tiba untuk menulis kode utama. Kode utama ini merupakan kode yang berisi
runnable code, dan menggunakan class yang sudah didefinisikan di module – module sebelumnya.
Dengan demikian kode program tidak akan menumpuk di file utama.
Jika Anda berhasil mengikuti petunjuk pada bab ini, module, packages dan file utama harus
mempunyai sususan seperti berikut :
<< gambar 12.1 struktur module packages bidang >>
listing : [Link]
92
from bidang import Segitiga, Persegi
sgtgA = Segitiga(3, 9)
prsgA = Persegi(5)
print "Luas Segitiga A : ", [Link]()
print "Sisi Miring Segitiga A : ", [Link]()
print "Keliling Segitiga A : ", [Link]([Link]())
print "\n"
print "Luas Persegi A : ", [Link]()
print "Keliling Segitiga A : ", [Link]()
Pada kode diatas kita meng-import kelas dari package bidang. Kemudian melakukan instansiasi dan
memberikan nilai sesuai yang kita inginkan. Kemudian kita akses method – method yang terdapat
pada kelas tersebut untuk mendapatkan informasi luas, dan keliling pada masing – masing bidang.
Jika berhasil maka kode yang akan dijalankan seperti berikut :
<< gambar 12.2 eksekusi [Link] >>
93
Daftar Pustaka
Python Software Foundation Team. Python v2.7.2 Documentation 1990 – 2011. The Python
Software Foundation.
Downey, Allen, Jeffrey Elkner, dan Chris Meyers. How to Think Like a Computer Scientist :
Learning with Python. 2002. Green Tea Press : Wellesley, Massachusetts
Swaroop. A Byte of Python. 2005. IonLab : Bangalore, India
Craven, Paul Vincent. Introduction to Computer Science Using Python and Pygame. 2011.
Simpson College, Computer Science Department : Indianola, Iowa
94
Lampiran 1 – Teknologi yang Menggunakan Python
Sebuah web framework yang memiliki motto “The Web
Framework for Perfectionist with Deadline”. Django
merupakan salah satu megaframework yang sudah
memiliki template engine, object relational mapper,
session, security, pagination, logging, authentication,
Django
caching, dan lain – lain.
Lebih lengkap kungjungi link berikut :
[Link]
PyGame adalah wrapper untuk Simple Direct Media
Library, sebuah library untuk memanipulasi grafis dan
media berupa audio dan video. Dengan PyGame Anda
bisa membuat game berbasis 2D. Kalaupun ingin
membuat game 3D dibutuhkan library lain untuk
mendukung pengolahan 3D
Fitur – fitur yang bisa didapatkan dari module – module
PyGame :
cdrom, mengelola cdrom dan pemutar suara
cursors, me-load gambar kursor, dan
menyertakan kursor standard
display, mengendalikan layar
draw, menggambar grafis sederhana pada
Surface
PyGame event, mengelola event dan antrian event
font, membuat dan menggunakan Truetype fonts
image, menyimpan dan me-load gambar
joystick, mengelola joystick
key, mengelola keyboard
mouse, mengelola mouse
movie, memainkan film bertipe mpeg
sndarray, memanipulasi suara dalam angka
surfarray, memanipulasi gambar dalam angka
time, mengendalikan waktu
transform, memperbesar, memutar, dan
membalik gambar
Bagi teman – teman yang ingin menggunakan Pygame
lebih lanjut bisa kunjungi link berikut :
[Link]
95
Panda 3D adalah 3D Engine, library dari kumpulan
fungsi – fungsi untuk 3D rendering dan pengembangan
game. Library-nya ditulis dengan C++. Untuk
pengembangan game dengan Panda3D, Anda harus
menulis dalam bahasa Python yang mengendalikan
library di Panda3D.
Panda3D mempunyai dukungan seperti : The Scene
Panda 3D
Graph, Model dan Actor,Texturing, Shaders, Camera
Control, Sound, Interval, Task dan Event Handling, Text
dan Image Rendering, DirectGUI, Render Effect,
Collision Detection, dan lainnya
lebih lengkap kunjungi link berikut ini :
[Link]
SimpleCV merupakan singkatan dari Simple Computer
Vision, merupakan framework python yang mudah
digunakan dan membungkus library computer vision
open source dan algoritma terkait untuk pemecahan
masalah.
Beberapa fitur yang didukung oleh SimpleCV antara
lain : membaca gambar, konversi gambar ke RGB,
SimpleCV
konversi gambar ke HLS, konversi gambar ke HSV,
konversi gambar ke Gray, membuat gambar baru dalam
format bitmap, menyalin gambar, memperbesar gambar,
pencerminan gambar, memperhalus gambar, edge
detection, dan lain – lain.
Lebih lengkapnya checklink berikut ini :
[Link]
Teknologi Natural Language Processing semakin hari
semakin maju. Sebagai contoh, banyak smartphones,
yang sudah mendukung pengenalan tulisan, kemudian
banyak mesin pencari yang mendukung penulisan teks
ta struktur, ada juga penerjemahan bahasa.
NLTK hadir sebagai salah satu tools yang ditulis dalam
NLTK Python untuk mendukung teknologi Natural Language
Processing. Beberapa fitur yang didukung oleh NLTK
antara lain : Language Processing, Text Corpora,
Processing Raw Text, Categorizing and Tagging Words,
Parsing text, Semantic Analysis, dan lain – lain.
Lebih lanjut cobe kunjungi link berikut :
[Link]
Flask Flask merupakan micro web framework yang
mendukung untuk diintegrasikan dengan berbagai
96
library pendukung lainnya. Flask memerlukan WSGI
Toolkit yang dinamakan Weurkzeug dan Template
Engine Jinja2.
Flask memiliki fitur seperti : templating engine, testing
application, logging application error, debuggin
application error, configuration handling, signal,
pluggable view, extension, dan lain – lain.
Lebih lengkap kunjungi link berikut :
[Link]