anggil 

melalui  sebuah  function seperti  print nilai  keluarannya  akan  ditampilkan.  Kenapa  nilainya 

“None” ? Karena di function yang tadi ditulis tidak disertakan keyword return. Jika sebuah function 

tidak diberikan return maka dapat dibilang function tersebut dianggap procedure. Sebuah function 

yang tidak memiliki nilai keluaran. 

<< gambar 7.1 hasil eksekusi fungsi_1.py  >>

Function yang memakai  “return”

Bagaimana kalau ditambahkan  return ? Jika ditambahkan  return,  function yang Anda tulis akan 

menghasilkan nilai keluaran. Jika dipanggil langsung maka program tidak akan menampilkan nilai 

keluaran  dari  function tersebut.  Jika  function tersebut  dipanggil  melalui  function atau  keyword 

misalnya  print, maka  nilai  keluarannya  akan  ditampilkan.  Berikut  terdapat  function yang 

menghasilkan nilai keluaran yang memiliki parameter dan tidak berparameter :

54

listing : fungsi_2.py 

def fungsi_tanpa_parameter():

    temp = 0

    for i in range(1, 5):

        temp = temp + i

    return temp

    

    

def fungsi_berparameter(batas_akhir):

    temp = 0

    for i in range(1, batas_akhir):

        temp = temp + i

    return temp

    

print " contoh penggunaan fungsi tanpa parameter : "

print "hasil : ", fungsi_tanpa_parameter()

print "hasil : ", fungsi_tanpa_parameter()

print "hasil : ", fungsi_tanpa_parameter()

print "\n\n"

print " contoh penggunaan fungsi berparameter : "

print "hasil : ", fungsi_berparameter(15)

print "hasil : ", fungsi_berparameter(20)

print "hasil : ", fungsi_berparameter(25)

Anda  sendiri  dapat  melihat  perbedannya  antara  function yang  berparameter  dengan  tidak 

berparameter.  Pada  function yang  tidak  berparameter.  Ketika  dipanggil  berulang  –  ulang  nilai 

keluarannya  tetap  sama.  Berbeda  dengan  function yang  memiliki  parameter,  nilai  keluaranya 

berbeda – beda ketika dipanggil. Tergantung nilai masukan yang diberikan.

<< gambar 7.2 hasil eksekusi fungsi_2.py  >>

55

Default Argument pada Python

Sekarang Anda sudah mengenal function yang berparameter dan tidak berparameter. Umumnya saat 

akan memberikan nilai pada sebuah  function, nilai tersebut akan diberikan saat  function tersebut 

dipanggil. Apakah saat memasukkan nilai boleh tidak diisi  atau dilewat ?  Lalu apakah akan ada 

nilainya ?. Di Python terdapat sebuah fitur yang dinamakan default argument saat menulis sebuah 

function.  Default argument sendiri adalah sebuah argumen yang sudah diisi nilai terlebih dahulu 

jika argumen tersebut tidak diberikan saat memanggil  function.  Jadi sekalipun dilewat nilai dari 

argument  tersebut  akan dipenuhi  dengan nilai  default nya.  Berikut  dibawah ini  terdapat  contoh 

pemanggilan function yang melewatkan semua argumen yang dibutuhkan function, dan yang tidak 

melewatkan semua argumen yang akan ditangani oleh default argument : 

listing : fungsi_3.py 

def cetak_biodata( nama, kota, umur=18):

   print "Nama : ", nama;

   print "Umur : ", umur;

   print "Kota : ", kota;

   return;

# kalau parameter diisi semua

print "Tanpa memakai default argument : "

cetak_biodata( nama="miki", umur=50, kota="bandung" )

print "\n"

# kalau parameter tidak diisi semua

print "Memakai default argument : "

cetak_biodata(kota="bandung", nama="miki")

Kode diatas jika dieksekusi akan tampil seperti berikut :

56

<< gambar 7.3 hasil eksekusi fungsi_3.py  >>

Variable-length Argument pada Python

Sekarang kita  akan mengenal  fitur  yang dinamakan dengan  variable-length  argument.  Fitur  ini 

digunakan ketika ingin membuat sebuah function yang memiliki argumen yang dinamis. Argumen 

ini dapat disebut sebagai argumen yang tidak utama. Misal dalam sebuah fungsi dibutuhkan tiga 

argumen, maka argumen ke – 4 sampai ke – n argumen, tidak akan ditampung oleh argumen utama. 

Tapi ditampung oleh argumen terakhir yang menampung seluruh argumen yang diberikan setelah 

argumen utama. Di Python untuk menandakan bahwa argumen tersebut variable-length argument, 

diberikan tanda “*” pada argumen terakhir.  Variable-length argument ini harus disimpan di akhir 

setelah argumen biasa dan default argument. Apabila disimpan di urutan awal, maka Python akan 

mengeluarkan error : “SyntaxError: invalid syntax”. Sebagai contoh Anda dapat perhatikan kode 

berikut ini : 

listing : fungsi_4.py 

def cetak_perolehan_nilai( nama, twitter, *scores):

   print "Nama : ", nama;

   print "Twitter : ", twitter;

   print "Score yang diperoleh : "

   i = 1

   for score in scores:

       print "nilai ke - %d : %d" % (i, score)

       i= i + 1

   

   return;

# kalau parameter diisi semua

print "Dengan adanya variable-length variabel sisa akan menjadi tuple : "

cetak_perolehan_nilai("Silvy", "@sivlysiv", 90, 80, 70, 80, 90)

57

Seperti yang Anda lihat pada contoh diatas,  argumen utama adalah nama dan twitter. Apabila kita 

memasukkan argumen setelahnya, maka argumen tersebut akan dikumpulkan dalam satu wadah 

yaitu *scores. Berapapun kita masukkan argumen, akan ditampung menjadi sebuah list yang berisi 

argumen – argumen yang dimasukkan setelah nama dan twitter.

<< gambar 7.4 hasil eksekusi fungsi_4.py  >>

Keyword Argument pada Function

Dalam penggunaan  function Anda  mesti  melewatkan  argumen  sesuai  urutan  yang  ditulis  pada 

parameter yang dibutuhkan oleh function yang Anda tulis. Apakah mungkin jika ditulis tanpa urutan 

argumen sudah baku pada function tersebut. Dalam function terdapat sebuah fitur yang dinamakan 

keyword argument.  Keyword argument ini dapat melewatkan argumen tanpa harus sesuai urutan. 

Keyword argument diberikan saat memanggil sebuah  function dengan mengambil nama argumen 

yang terdapat di  function disambung dengan tanda “=” dan nilai dari argumen tersebut. Jika kita 

memberikan  argumen  yang  tidak  sesuai  urutan  tanpa  memakai   keyword  argument,  maka 

argumen yang diterima function tersebut tidak akan sesuai.

listing : fungsi_5.py 

def cetak_biodata( nama, umur, kota):

   print "Nama : ", nama;

   print "Umur : ", umur;

   print "Kota : ", kota;

   return;

# kalau pakai keyword argument : mau urutannya gimanapun input akan sesuai

print "Tanpa memakai keyword argument : "

58

cetak_biodata( kota="bandung", nama="miki", umur=50 )

print "\n"

# kalau tidak memakai keyword argument : mau urutannya gimanapun input tidak akan sesuai

print "Memakai keyword argument : "

cetak_biodata( "bandung", "miki", 50)

print "\n"

# kalau tidak memakai keyword argument : tapi urutannya sesuai maka input  akan sesuai

print "Memakai keyword argument : tapi urutannya sesuai "

cetak_biodata(  "miki", 50, "bandung")

Pada  contoh  diatas,  Anda  dapat  melihat  perbedaan  antara  function yang  melewatkan  keyword 

argument dengan yang tidak memakai   keyword argument. Contoh yang tidak memakai  

keyword argument tidak akan menerima masukan sesuai yang dibutuhkan  function ketika urutan 

argumennya diacak. 

<< gambar 7.5 hasil eksekusi fungsi_5.py  >>

Keyword-length Argument pada Function 

59

Keyword-length  argument mempunyai cara penggunaan yang sama hanya saja, keyword-length ini 

menampung  keyword argument yang berlebih ketika  diberikan kepada  function yang dipanggil. 

Keyword argument yang berlebih akan diterima dalam bentuk dictionary.

listing: fungsi_6.py 

def cetak_perolehan_nilai( nama, twitter, **data_tambahan):

   print "Nama : ", nama;

   print "Twitter : ", twitter;

   print "\n"

   print "Data Lainnya : "

   i = 1

   for data in data_tambahan:

       print "%s : %s" % (data, data_tambahan[data])

       

   

   return;

# kalau parameter diisi semua

print "Dengan adanya keyword argument, argumen tersisa akan menjadi dictionary : "

cetak_perolehan_nilai("Silvy","@sivlysiv",email="silvysilvy@gmail.com", 

facebook="www.facebook.com/silvysil", telp="0838-1234-5678")

Pada contoh diatas, keyword argument yang berlebih ditampung kedalam argument data_tambahan 

dan argumen berlebih tersebut disimpan dalam dictionary.

<< gambar 7.6 hasil eksekusi fungsi_6.py  >>

60

Pass by Reference dan Pass by Value pada Python

Berikutnya terdapat masalah  pass by value atau  pass by reference.  Di Python semua nilai  akan 

dilewatkan secara  by reference. Artinya jika kita mengubah argumen di dalam fungsi maka nilai 

argumen   yang  direferensi  tersebut  akan  ikut  berubah  juga.  Misalkan  dibawah  contoh  berikut 

terdapat sebuah list yang akan diganti dengan nilai baru, dan ada juga yang ditambahkan nilai baru. 

listing : fungsi_7.py 

def sebuah_fungsi(sebuah_list):

    sebuah_list = [1, 2, 3, 4, 5]

    print sebuah_list

    

def sebuah_fungsi_lainnya(sebuah_list):

    sebuah_list.append([10, 20, 30])

    print sebuah_list

ini_list = [10, 20, 30]

sebuah_list = [100, 200, 300]

print "apakah ini_list berubah ? "

print ini_list

sebuah_fungsi(ini_list)

print ini_list

print ini_list

sebuah_fungsi_lainnya(ini_list)

print ini_list

print "apakah sebuah_list berubah ? "

print sebuah_list

sebuah_fungsi(sebuah_list)

print sebuah_list

print sebuah_list

sebuah_fungsi_lainnya(sebuah_list)

print sebuah_list

Pada kode diatas,  Anda akan melihat sebuah perbedaan yang cukup penting.  Ketika sebuah  list 

diganti  nilainya  maka  list yang  ada  di  luar  function tidak  akan  terpengaruh.  Tapi  ketika  kita 

menambahkan data baru dengan memakai  method pada list tersebut. Nilai diluar ikut berubah,. 

Hal ini terjadi karena pada function sebuah_fungsi_lainnya(), list sebuah_list masih menunjuk atau 

merujuk ke sebuah_list yang berada diluar. Atau dalam kata lain masih menunjuk ke “address” yang 

sama di memori utama.

61

<< gambar 7.7 hasil eksekusi fungsi_7.py  >>

Variable Scope pada Python

Variable scope adalah sebuah kondisi dimana  variabel diakses secara lokal pada blok kode tertentu 

atau bersifat universal yang menyebabkan variabel tersebut dapat diakses dari blok kode manapun. 

Misal  ada  sebuah  variabel  di  dalam  function.  Variabel  tersebut  bersifat  lokal  dan  hanya  dapat 

diakses didalam function tersebut. Lalu bagaimanakah kita menjadikan sebuah variabel agar bersifat 

global ?. Di Python terdapat sebuah keyword yang bernama global.  Keyword ini digunakan untuk 

merujuk sebuah variabel di luar blok kode, misalnya sebuah variabel di dalam  function, dengan 

nama yang sama. 

listing : fungsi_8.py 

def sebuah_fungsi():

    angka =  10

    print "di dalam sebuah_fungsi, angka bernilai : ", angka

def sebuah_fungsi_lainnya():

    global angka

    angka = 114

    print "di dalam sebuah_fungsi, angka bernilai : ", angka

    

angka = 6666

print "sebelum dipanggil sebuah_fungsi : ", angka

sebuah_fungsi()

print "sesudah dipanggil sebuah_fungsi : ", angka

print "\n\n"

62

print "sebelum dipanggil sebuah_fungsi_lainnya : ", angka

sebuah_fungsi_lainnya()

print "sesudah dipanggil sebuah_fungsi_lainnya : ", angka

Pada  kode  diatas  variabel  yang  bernama  angka  dibubuhi  keyword global pada  function 

sebuah_fungsi_lainnya(). Hasilnya saat angka diubah nilainya. Maka nilai di variabel angka yang 

berada di luar blok function sebuah_fungsi_lainnya() ikut berubah.

<< gambar hasil eksekusi fungsi_8.py  >>

63

8. Mengenal Exception

Jenis – Jenis Exception

Exception adalah sebuah cara di Python untuk menjebak error, dan menangangi error tak terduga 

pada  program Python  yang  Anda  tulis.  Exception akan  tetap  menjalankan  baris  kode  program 

dibawah  bagian  kode program yang  error.  Hal  ini  mempermudah  proses  debugging.  Lalu  apa 

bedanya jika kita memakai  kondisional biasa yang memakai   if untuk mencegah  error ? 

Pertama Anda harus mencari cara untuk menangkap nilai – nilai yang error, misal ketika membuka 

file Anda harus memakai   method – method yang ada pada  file untuk mengetahui  error atau 

tidak. Kedua dengan memakai  kondisional  if   biasa, program yang Anda tulis akan langsung 

dihentikan ketika error terjadi. Ketiga pengambilan error akan otomatis ditangani oleh Python dan 

error tersebut  akan  ditangani  sesuai  dengan  penanganan  yang  Anda  lakukan,  dan  baris  kode 

program dibawahnya akan tetap dieksekusi.

Python  sendiri  sudah  menyediakan  beberapa  standard  error yang  dapat  digunakan  oleh 

programmer dalam menjaga pengembangan aplikasinya dari  error yang tak terduga. Anda sendiri 

dapat  membuat  error menurut  definisi  Anda.  Hal  tersebut  akan diulas  di  bagian  akhir  bab  ini. 

Berikut adalah beberapa standard error  yangt terdapat di Python :

No Nama Exception Keterangan

1 Exception Menangani semua exception

2

StopIteration Exception ini  muncul  ketika  method next()  tidak 

menunjuk ke objek apapun saat iterasi

3 SystemExit Exception ini muncul ketika sys.exit() dipanggil

4

StandardError Exception untuk  menangani  semua  built-in  

exception kecuali StopIteration dan SystemExit

5

ArithmeticError Exception untuk menangani  error saat perhitungan 

angka

6

OverflowError Exception ini  muncul  ketika  perhitungan  angka 

melebihi  batas  maksimum  dari  tipe  angka  yang 

dihitung

7

FloatingPointError Exception ini   muncul  ketika  terdapat  kegagalan 

pada perhitungan angka bertipe float

8

ZeroDivisionError Exception ini  muncul  jika  ada  pembagian  atau 

modulus oleh 0 terhadap angka tipe apapun

10

AssertionError Exception ini muncul ketika terjadi kegagalan pada 

saat perintah assert dijalankan

11

AttributeError Exception ini muncul ketika gagal menunjuk atribut 

dari suatu objek

12 EOFError Exception ini  muncul  ketika  tidak  ada  input  saat 

64

memakai   function raw_input()  atau  input  dan 

telah  mencapai  bagian  akhir  file  saat  pembacaan 

file.

13

ImportError Exception ini  muncul  ketika  gagal  saat 

memakai  import

14

KeyboardInterrupt Exception ini  muncul  ketika  user  meng-interrupt 

eksekusi  program,  biasanya  ketika  menekan 

kombinasi ctrl + c

15

LookupError Exception muncul ketika gagal pada saat proses look 

up

16

IndexError Exception ini muncul ketika tidak ada indeks yang 

dituju pada struktur data seperti list atau tuple

17

KeyError Exception ini  muncul  ketika  tidak  ada  key yang 

dituju pada dictionary

18

NameError Exception ini  muncul  ketika  variabel  tidak 

ditemukan pada lingkup lokal di suatu function dan 

kondisional atau pada lingkup global

19

UnboundLocalError Exception ini  muncul  ketika  mencoba  mengakses 

variabel  lokal  di  function atau  method tapi  belum 

ada nilainya

20

EnvironmentError Exception in muncul ketika terjadi kegagalan diluar 

lingkup Python

21

IOError Exception in  muncul  ketika  proses  input/output 

gagal,  misal  saat  memakai   print atau  saat 

membuka file

22

OSError Exception ini muncul ketika terjadi kegagalan pada 

sistem operasi yang digunakan

23

SyntaxError Exception ini muncul ketika terjadi kesalahan pada 

penggunaan sintaks Python

24

IndentationError Exception ini  muncul  ketika  indentasi  pada  blok 

kode tidak sesuai penggunaannya.

25

SystemError Exception ini  muncul  ketika  terdapat  masalah 

internal  pada  interpreter,  saat  error ini  muncul 

interpreter tidak akan keluar

26

TypeError Exception ini  muncul  jika ada kesalahan tipe data 

saat proses perhitungan, misal huruf dibagi angka

27

ValueError Exception ini  muncul  ketika  argumen  yang  tidak 

sesuai diterima oleh builtin function

28

RuntimeError Exception ini muncul ketika terjadi kesalahan yang 

tidak masuk kategori manapun

29

NotImplementedEror Exception ini  muncul  ketika  abstract  method dari 

suatu  class tidak  diimplementasikan di  class yang 

mewarisinya.

65

Agar lebih paham dibawah ini ada beberapa contoh kode yang penggunaan  exception-nya sangat 

sering digunakan. Sebagai contoh pertama berikut terdapat kode yang berisi pembagian oleh angka 

nol.

listing : exception_1.py 

sebuah_angka = 29

try:

    print sebuah_angka / 0

except:

    print "proses perhitungan  gagal "

print "proses cetak ini masih dapat dijalankan  "

try:

    print sebuah_angka / 0

except ZeroDivisionError, e:

    print "proses perhitungan gagal karena  : ", e

print "proses cetak ini masih dapat dijalankan  "

print sebuah_angka / 0

# jika tidak memakai exception maka proses berikutnya tidak akan dijalankan

print "apakah proses cetak ini masih dapat dijalankan ??? "

Di dalam try terdapat kode yang kemungkinan akan memunculkan exception. Sedangkan di dalam 

except adalah kode yang akan dieksekusi jika exception tersebut muncul.  Pada try-except yang 

pertama, semua error akan ditangani dan Anda tidak akan mengetahui jenis exception apa yang 

yang ditangani. Pada try-except yang kedua, Anda memprediksi akan menangani error jika terjadi 

pembagian oleh nol. Manakah yang lebih baik ? Pastikan Anda sudah memiliki perkiraan apa saja 

error  yang  akan  terjadi  sehingga  saat  debugging  nanti  akan  mempermudah  Anda  untuk 

memperbaiki kode program Anda. Pada blok kode try-except sekalipun error kode dibawahnya akan 

tetap dieksekusi. Pada proses perhitungan di bagian akhir tidak ditangani oleh try-except sehingga 

kode dibawahnya tidak dieksekusi. Berikut hasil yang diberikan jika kode dieksekusi :

66

<< gambar 8.1 hasil eksekusi exception_1.py  >>

Contoh lain yang umum dipakai adalah IndexError dan KeyError. Kedua error ini umum dipakai 

saat operasi list, tuple, dan dictionary. Berikut terdapat contoh menunjuk indeks dan key yang tidak 

terdapat pada list, tuple, dan dictionary yang didefinisikan dalam kode dibawah ini. 

listing : exception_2.py 

sebuah_list = [1, 2, 3, 4, 5]

sebuah_tuple = (1, 2, 3, 4, 5)

sebuah_dictionary = {'nama':'Mangaraja', 'email':'mangaraja@yahoo.com'}

try:

    print sebuah_list[10]

except IndexError, e:

    print "proses gagal karena  : ", e

print "proses cetak ini masih dapat dijalankan  "

try:

    print sebuah_tuple[10]

except IndexError, e:

    print "proses gagal karena  : ", e

print "proses cetak ini masih dapat dijalankan  "

try:

    print sebuah_dictionary['website']

except KeyError, e:

    print "proses gagal karena  : ", e

print "proses cetak ini masih dapat dijalankan  "

67

Pada contoh diatas “sebuah_list”  dan “sebuah_tuple” ditangani  oleh  try-except yang menangani 

exception IndexError. Pada masing – masing blok, kita ingin mencoba indeks yang tidak ada pada 

list dan  tuple tersebut.  Sedangkan  pada  blok  try-except untuk  dictionary,  kita  ingin  mencoba 

menunjuk key “website” tapi karena key tersebut tidak ada, maka akan muncul exception KeyError.

<< gambar 8.2 hasil eksekusi  exception_2.py  >>

Berikutnya contoh  exception yang tak kalah populer lainnya adalah AttributeError.  Exception ini 

muncul ketika sebuah class tidak memiliki atribut (variabel) yang diakses oleh programmer. Hal ini 

sangat penting untuk diperhatikan ketika merancang sebuah aplikasi  berbasis objek. Anda harus 

memeriksa apakah atribut yang Anda akses pada sebuah kelas ada pada saat perancangan atau tidak. 

Jika tidak yakin gunakanlah try-except untuk menjebak AttributeError tersebut. 

listing : exception_3.py 

class PersegiPanjang:

    panjang = 0

    lebar = 0

    def __init__(self, p, l):

        self.panjang = p

        self.lebar = l

        

        

prsg_pjg = PersegiPanjang(10, 5)

try:

    print "panjang : ", prsg_pjg.panjang

    print "lebar : ", prsg_pjg.lebar

    print "tinggi :", prsg_pjg.tinggi

except AttributeError, e:

    print "proses pemanggilan atribut gagal karena --> ", e

68

print "proses cetak ini masih dapat dijalankan"

Pada contoh diatas, kita ingin mencoba mengakses atribut tinggi pada objek prsg_pjg. Sebelumnya 

tahapan yang dilalui adalah proses instansiasi, dimana kita memanggil sebuah template objek yang 

akan dibentuk kedalam sebuah variabel. Kemudian di bagian  try-except tersebut kita coba akses 

atribut  tinggi.  Karena  atribut  tersebut  tidak  ada  di  kelas  persegi  panjang,  maka  exception 

AttributeError akan muncul. 

<< gambar 8.3 hasil  eksekusi exception_3.py  >>

Contoh  yang  terakhir  dari  sekian  banyak  exception yang  terdapat  di  Python  adalah  IOError. 

Exception ini biasa terjadi ketika proses input data, saat mencetak data, atau saat operasi file. Pada 

contoh berikut kita akan membuka sebuah file, tapi file tersebut tidak ada. Secara default jika kita 

membuka  file tanpa  menyertakan mode  pembacaan,  maka mode  tersebut  adalah  mode 'r'  yang 

artinya read atau baca.

listing : exception_4.py 

try :

    f = open('nilai.txt')

except IOError, e:

    print "Proses pembukaan file gagal karena : ", e

print "proses cetak pada baris ini masih dapat dijalankan"

Pada contoh diatas kita ingin  file nilai.txt, tapi karena file tersebut belum pernah ditulis sebelumnya 

maka exception akan muncul yaitu IOError. Selain digunakan untuk file, IOError dapat terjadi juga 

saat pembacaan built-in storage milik Python seperti saat pembacaan pickle, shelve, dan marshal.

69

<< gambar 8.4 hasil  eksekusi exception_4.py  >>

Menyusun Multiple Except

Apakah kita dapat menangkap exception dalam satu  blok try-except ?. Di Python sendiri terdapat 

fitur multiple except, yaitu kita dapat menangkap exception dengan baris except yang berbeda. Hal 

ini dilakukan jika kita ingin memberikan perlakuan berbeda kepada setiap exception yang ditangani. 

Lebih lemgkapnya pantau kode dibawah ini.

listing : exception_5.py 

try:

    

    angka1 = int(raw_input('masukkan angka ke-1 : '))

    angka2 = int(raw_input('masukkan angka ke-2 : '))

    print 'hasil perhitungan : ', angka1 / angka2

    

except ZeroDivisionError, e:

    print "proses pembagian gagal karena  : ", e

except ValueError, e:

    print "proses perhitungan gagal karena : ", e

print "proses cetak ini masih dapat dijalankan  "

Pada kode diatas kita mencoba menjebak dua buah exception dengan dua baris except berbeda. Hal 

tersebut dilakukan agar perlakuan pada penanganan setiap  exception memiliki penanganan yang 

berbeda. Misal pada baris except pembagian nol ada informasi “proses pembagian gagal karena : “ , 

sedangkan di baris except nilai error terdapat informasi “proses perhitungan gagal karena : “. Jadi 

dengan memakai  baris except yang berbeda Anda dapat menangani error yang berbeda sesuai 

kebutuhan Anda.

70

<< gambar 8.5 hasil eksekusi  exception_5.py  >>

memakai  Multiple Exception

Berbeda sedikit  pada contoh sebelumnya, jika pada setiap  exception ditangani  oleh setiap baris 

except.  Maka  pada  kaidah  multiple  exception di  satu  except menangani  beberapa  exception. 

Bedanya, semua  exception yang ditangani baris  except tersebut akan mendapat penanganan yang 

sama. 

listing : exception_6.py 

try:

    

    angka1 = float(raw_input('masukkan angka ke-1 : '))

    angka2 = float(raw_input('masukkan angka ke-2 : '))

    print 'hasil perhitungan : ', angka1 / angka2

    

except (ZeroDivisionError, ValueError, TypeError),  e:

    print "proses perhitungan gagal karena  : ", e

print "proses cetak ini masih dapat dijalankan  "

Kode diatas jika dieksekusi akan muncul tampilan seperti berikut :

71

<< gambar 8.6 hasil  eksekusi exception_6.py  >>

Try-Except Bersarang

Mirip  seperti  kondisional  atau  perulangan yang dapat  ditambahkan blok kode kondisional  atau 

perulangan didalamnya.  Try-except pun mempunyai  kaidah yang sama dimana  try-except dapat 

disimpan didalam  try-except yang lainnya. Prioritasnya adalah tangani yang luar terlebih dahulu. 

Jika terjadi di  try-except terluar maka blok kode didalamnya yang terdapat  try-except tidak akan 

dieksekusi. Jika di blok luar tidak terdapat error. Maka penanganan exception di try-except bagian 

dalam akan dilakukan. 

listing : exception_7.py 

try:

    

    angka1 = float(raw_input('masukkan angka ke-1 : '))

    angka2 = float(raw_input('masukkan angka ke-2 : '))

    try :

        print 'hasil perhitungan : ', angka1 / angka2

    except ZeroDivisionError, e:

        print "proses perhitungan gagal karena  : ", e

except ValueError,  e:

    print "proses input gagal karena  : ", e

print "proses cetak ini masih dapat dijalankan  "

Jika  pada  contoh  exception_5.py  baris  except ZeroDivisionError  disimpan  di  tingkat  pertama, 

sekarang  baris  tersebut  disarangkan  di  try-except yang  utama.  Dengan  demikian  Anda  dapat 

menangani exception dari dalam secara langsung. 

72

<< gambar 8.7 hasil eksekusi  exception_7.py  >>

Membuat Exception Sendiri

Lalu  apakah kita terbatas pada penanganan standard exception Python saja ?. Anda dapat membuat 

exception Anda  sendiri  dengan  membuat  sebuah  kelas  yang  diturunkan  dari  kelas  Exception. 

Dengan cara tersebut, Anda dapat membuat exception Anda sesuai kebutuhan pada kasus yang akan 

Anda tangani.  Misal  kita  ingin membuat  sebuah  exception jika angka yang dimasukkan adalah 

angka negatif. Pertama kita buat dulu class nya dengan nama yang diingikan, turunkan dari kelas 

Exception, dan tentukan penanganan error pada method – method di  kelas tersebut. 

listing : exception_8.py 

class NegativeValueError(Exception):

    def __init__(self, value):

        self.value = value

    

    def __str__(self):

        s = "Tidak menerima angka kurang dari 0 " + str(self.value)

        return s

            

def cekAngka(angka):

    if angka < 0:

        raise NegativeValueError(angka)

try:

    sebuah_angka = int(raw_input("masukkan sebuah angka : "))

    cekAngka(sebuah_angka)

except (NegativeValueError, TypeError), e:

73

    print "proses gagal karena : ", e

Untuk  memanggil  exception-nya  kita  memerlukan  keyword raise ketika  exception tersebut 

dimunculkan  maka  exception akan  ditangani  except dan  mengeluarkan  pesan  error-nya.  Pesan 

tersebut  berasal  dari  function __str__()   yang  sebelumnya  telah  kita  definisikan  pada  kelas 

NegativeValueError.

<< gambar 8.8 hasil  eksekusi exception_8.py  >>

memakai  “finally” pada Try-Except

Dan  akhirnya  sekarang  kita  membahas  finally.  Keyword  ini  digunakan  untuk  menentukan 

penanganan  apa  yang  harus  dilakukan  baik  ketika  exception muncul  atau  tidak.  Misal  saat 

mengambil data dari  database,  kita tidak akan tahu ada kegagalan apa yang akan terjadi.  Agar 

program kita tetap aman dan data tidak rusak. Maka baik terjadi kegagalan atau tidak koneksi ke 

database harus  ditutup.  Hal  tersebut  juga  bisa  terjadi  saat  pembacaan  file.  Untuk  mencegah 

kerusakan file, baik akan terjadi error atau tidak, file harus ditutup. Di blok finally ini penanganan 

yang terjadi ketika exception muncul atau tidak disimpan. 

listing : exception_9.py 

try:

    

    angka1 = float(raw_input('masukkan angka ke-1 : '))

    angka2 = float(raw_input('masukkan angka ke-2 : '))

    try :

        print 'hasil perhitungan : ', angka1 / angka2

    except ZeroDivisionError, e:

        print "proses perhitungan gagal karena  : ", e

except ValueError,  e:

    print "proses input gagal karena  : ", e

finally:

74

    print "coba perhatikan lagi nilai yang anda masukkan "

    

    

print "proses cetak ini masih dapat dijalankan  "

Kode diatas jika dieksekusi akan muncul tampilan seperti berikut :

<< gambar 8.9 hasil  eksekusi exception_9.py  >>

9. Membuat File

Pengenalan File

Biasanya jika kita tidak memakai   file, hasil pemrosesan data hanya akan disimpan di  main 

memory. Setelah program dihentikan atau tiba – tiba komputer Anda mati, semua data akan hilang. 

Lalu bagaimana jika ingin memakai  kembali data yang sudah diproses sebelumnya ?. Untuk 

menyimpan data agar bisa diproses di kesempatan selanjutnya, misal komputer dimatikan kemudian 

dinyalakan lagi hari esoknya. Kita butuh sebuah penyimpanan yang bersifat resident dan disimpan 

di  secondary storage seperti  harddisk. Python sendiri menyediakan beberapa media penyimpanan 

yang bisa digunakan oleh programmer Python, ada file, shelve, marshal, pickle, dan sqlite3.

Pada bab ini kita akan bahas mengenai file berupat txt. File di Python bisa berupa txt, csv, atau jenis 

lainnya. Txt merupakan contoh file yang sering digunakan. File jenis ini berisi plain text. File jenis 

ini menyimpan karakter ascii standard yang diterima dari user.

Pada pembuatan file terdapat beberapa mode dalam manipulasi file. Berikut daftar mode manipulasi 

file tersebut :

No Mode Keterangan

1 r Membuka  file dan  hanya  untuk  pembacaan 

saja.  Pointer  file akan  ditempatkan  di  awal 

file.  Jika  pada  saat  pembukaan  file tidak 

disertakan mode manipulasi  file, maka mode 

75

ini  secara  default dipakai  untuk  manipulasi 

file

2 w

Membuka  file dan  hanya  untuk  penulisan 

saja.  Jika  file yang  dibuka  sudah  ada  dan 

memakai   mode  'w',  maka  file tersebut 

akan ditimpa. Jika  file tidak ada maka akan 

dibuatkan file baru. 

3 a

Membuka  file untuk  penambahan  isi  file. 

Pointer file disimpan di bagian akhir file jika 

file tersebut ada. Jika file tidak ada maka akan 

dibuatkan file baru.

4 b

Mode ini ditambahkan masing – masing pada 

mode  r,  w,a  menjadi  rb,  wb,  ab.  Dengan 

menambahkan  mode  b  pada  setiap  mode 

manipulasi standar. Maka pemba file caan file 

akan dilakukan dalam format biner

5 +

Mode ini ditambahkan kedalam mode r, w, a. 

 r+  : baca dan tulis

 w+ : tulis dan baca

 a+  : tambah dan baca

Membuat File Baru

Agar lebih paham kita akan mencoba membuat sebuah file txt. Pertama kita biasakan cegah error 

dengan memakai  try-except dan tangkap exception IOError, agar jika terjadi error kelak, kita 

bisa menanganinya dengan lebih mudah. Kemudian di dalam blok try-except tersebut buat sebuah 

objek  file dengan  memakai   built-in  function open().  Pada  function tersebut  terdapat  dua 

parameter yang biasa digunakan yaitu, nama file serta mode manipulasi file-nya. Karena kita ingin 

membuat file baru, maka mode “w” digunakan pada kasus pertama berikut : 

listing : file_1.py 

try:

    sebuah_file = open("absen.txt", 'w')

    print "nama file yang tadi dibuat : ", sebuah_file.name

    print "mode pembacaan file : ", sebuah_file.mode

    print "apakah filenya udah ditutup ? : ", sebuah_file.closed

    sebuah_file.close()

    print "apakah filenya udah ditutup ? : ", sebuah_file.closed

except IOError, e:

    print "proses gagal karena : ", e

Ketika kita sudah membuka sebuah file dan terbentuk objek file. Kita dapat mengakses method dan 

76

atribut  pada objek  file tersebut.  Atribut yang sering diakses untuk pemrosesan  file antara lain : 

name, mode, closed. Atribut name adalah nama  file tersebut, mode adalah mode manipulasi  file 

tersebut, dan closed menyatakan apakah file tersebut sudah ditutup atau belum. Sedangkan method 

yang diakses diatas  adalah close(),  yang digunakan untuk menutup  file setelah penggunaan  file 

selesai. Dengan menutup file, penggunaan memori utama akan dihemat. Jika tidak pernah menutup 

file dalam jumlah yang banyak bisa menyebabkan memory leak. Jadi berhati – hatilah :D.

<< gambar 9.1 hasil  eksekusi file_1.py  >>

Mengisi File

Pada contoh pertama, file yang kita buat masih kosong, belum berisi. Sesuai namanya kita sedang 

membuat file bernama 'absen.txt', yang didalamnya akan terdapat daftar hadir perkuliahan. Dengan 

memakai  method write(), kita bisa menambahkan isi pada  file 'absen.txt', dan yang akan kita 

isikan adalah teks.  Method ini  memerlukan parameter sebuah  string yang akan ditulis  di lokasi 

tertentu pada file berdasarkan posisi pointer file berada. 

listing : file_2.py 

try:

    sebuah_file = open("absen.txt", 'w')

    print "nama file yang tadi dibuat : ", sebuah_file.name

    print "mode pembacaan file : ", sebuah_file.mode

    print "apakah filenya udah ditutup ? : ", sebuah_file.closed

    sebuah_file.write('1. Jajang Surahman, Teknik Informatika, ITENAS\n')

    sebuah_file.write('2. Angel Corine, Manajemen Informatika, UNIKOM\n')

    sebuah_file.write('3. Samsul Basri, Ilmu Komputer, UPI\n')

    sebuah_file.close()

    print "apakah filenya udah ditutup ? : ", sebuah_file.closed

77

except IOError, e:

    print "proses gagal karena : ", e

Setelah kita menambahkan isi pada  file teks yang kita buat, kita dapat membuka  file yang telah 

dibuat dengan teks editor dan dapat melihat isi dari file tersebut. 

<< gambar 9.2 hasil  eksekusi file_2.py  >>

Membaca Isi File

Setelah mengisi file dengan method write(). Sekarang kita akan memakai  method read() untuk 

membaca file. Pastikan, file yang akan dibaca harus dalam mode 'r', jika tidak dalam mode tersebut, 

misal dalam mode 'w', maka akan muncul  error : ”OError: File not open for reading”. Kemudian 

untuk mengetahui posisi pointer file berada, kita gunakan method tell().

listing : file_3.py 

try:

    sebuah_file = open("absen.txt", 'r')

    print "nama file yang tadi dibuat : ", sebuah_file.name

    print "mode pembacaan file : ", sebuah_file.mode

    print "apakah filenya udah ditutup ? : ", sebuah_file.closed

    print "isi file : \n", sebuah_file.read()

    print "posisi pointer pada file : ", sebuah_file.tell()

    sebuah_file.close()

    print "apakah filenya udah ditutup ? : ", sebuah_file.closed

except IOError, e:

    print "proses gagal karena : ", e

78

Dengan  memakai   method read(),  kita  dapat  melihat  isi  dari  file tersebut.  Tapi  method ini 

membaca sekaligus isi file yang dibaca, tidak perbaris. Jika pembacaan dilakukan sekaligus, ruang 

memori yang dibutuhkan jauh lebih besar daripada  file yang dibaca perbaris. Kemudian dengan 

adanya method tell(), kita bisa mengetahui posisi  pointer file berada dimana, agar mempermudah 

saat manipulasi file.

<< gambar 9.3 hasil eksekusi  file_3.py  >>

Membaca Isi File dengan Cara Baris Per Baris

Jika pada contoh sebelumnya pembacaan file dilakukan sekaligus, pada contoh kali ini pembacaan 

file akan dilakukan baris perbaris. Pembacaan file teks dengan membaca perbaris ini bisa dilakukan 

dengan  memakai   pengulangan  for.  File ini  diperlakukan  layaknya  list yang  digunakan  di 

pengulangan for. Disini file dianggap sebagai list yang berisi elemen string.

listing : file_4.py 

try:

    sebuah_file = open("absen.txt", 'r')

    print "nama file yang tadi dibuat : ", sebuah_file.name

    print "mode pembacaan file : ", sebuah_file.mode

    print "apakah filenya udah ditutup ? : ", sebuah_file.closed

    print "isi file : \n"

    for line in sebuah_file:

        print line

79

    print "posisi pointer pada file : ", sebuah_file.tell()

    sebuah_file.close()

    print "apakah filenya udah ditutup ? : ", sebuah_file.closed

except IOError, e:

    print "proses gagal karena : ", e

Hasil yang diperlihatkan hampir sama dengan contoh sebelumnya hanya saja teknik pembacaannya 

sedikit  berbeda.  Jika  file berukuran besar,  akan lebih bijak jika kita membacanya perbaris  agar 

ruang memori yang digunakan tidak banyak terpakai.

<< gambar 9.4 hasil  eksekusi file_4.py  >>

Mengatur Posisi Pointer File

Suatu saat kita ingin mengisi file di lokasi tertentu di sebuah file. Biasanya kita menambahkan file 

di bagian akhir file, atau membaca file selalu dibagian awal file. Ada saatnya kita ingin membaca di 

posisi ke 15 dari awal file, atau posisi -15 karakter dari  pointer file. Di objek file terdapat method 

yang dinamakan seek(). Method tersebut memiliki dua buah paramater yaitu jarak yang diinginkan 

dan  patokan jarak tersebut. Jika parameter kedua diisi oleh angka 0, berarti patokan berada di awal 

file. Jika parameter kedua  diisi oleh angka 1, berarti patokan berada di tempat pointer file berada. 

Jika parameter kedua diisi oleh angka 2, maka patokan berada di bagian akhir file. Jika parameter 

pertama diisi angka positif maka penentuan jarak akan dihitung ke sebelah kanan, jika diisi angka 

negatif maka penentuan jarak akan dihitung ke sebelah kiri.

listing : file_5.py 

try:

    sebuah_file = open("absen.txt", 'rb')

    print "nama file yang tadi dibuat : ", sebuah_file.name

    print "mode pembacaan file : ", sebuah_file.mode

80

    print "apakah filenya udah ditutup ? : ", sebuah_file.closed

    print "isi file : \n"

    for line in sebuah_file:

        print line

    print "posisi pointer pada file : ", sebuah_file.tell()

    print "kembali lagi ke awal : ", sebuah_file.seek(0, 0)

    print "isi file : \n"

    for line in sebuah_file:

        print line

    print "posisi pointer pada file : ", sebuah_file.tell()

    sebuah_file.close()

    print "apakah filenya udah ditutup ? : ", sebuah_file.closed

except IOError, e:

    print "proses gagal karena : ", e

Pada contoh diatas, pointer file dipindahkan kembali ke posisi awal. Dengan memberikan jarak 0, 

dan menentukan patokan di awal file, maka posisi pointer file pindah ke bagian awal file. Dengan 

demikian file bisa dibaca ulang untuk kedua kalinya.

<< gambar 9.5 hasil eksekusi  file_5.py  >>

81

Mengganti Nama File

Dalam manipulasi  file, terdapat operasi seperti pengubahan nama file, memindahkan file, ataupun 

menghapus  file.  Python  sendiri  menyediakan  module  os yang  didalamnya  terdapat  fitur-  fitur 

tersebut.  Sebagai  contoh  pertama  kita  akan  mengganti  nama  file dari  “absen.txt”  ke  “daftar-

hadir.txt”. Pertama kita harus meng-import modul  os. Kemudian kita gunakan  method rename(). 

Method tersebut memiliki dua parameter yaitu nama file yang akan diubah namanya, dan nama baru 

yang diinginkan.

listing : file_6.py 

import os

try:

    os.rename('absen.txt', 'daftar-hadir.txt')

    print "Nama file sudah diubah.."

except (IOError, OSError), e:

    print "proses error karena : ", e

Setelah kode diatas dijalankan, coba lihat file yang sebelumnya “absen.txt” akan berubah menjadi 

“daftar-hadir.txt”.

<< gambar 9.6 hasil  eksekusi file_6.py  >>

Menghapus File

Contoh lainnya adalah menghapus file. Kita bisa gunakan method remove() untuk menghapus file 

yang diinginkan. Parameter yang dibutuhkan adalah nama file yang akan dihapus.

listing : file_7.py 

82

import os

try:

    os.remove('daftar-hadir.txt')

    print "File sudah dihapus.."

except (IOError, OSError), e:

    print "proses error karena : ", e

Kemudian jika file sudah dihapus, kita tidak dapat membuka file tersebut. Karena file tersebut sudah 

hilang dari penyimpanan sekunder.

<< gambar 9.7 hasil  eksekusi file_7.py  >>

Untuk contoh – contoh lainnya Anda bisa membuka dokumentasi resmi Python, atau coba kunjungi 

beberapa website yang ada di lampiran – 2. 

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):

        self.panjang = panjang

        self.lebar = lebar

    

    def hitung_luas(self):

        return self.panjang * self.lebar

    

    def hitung_keliling(self):

        return (2*self.panjang) + (2*self.lebar)

    def gambar_persegi_panjang(self):

        for i in range(0, self.lebar):

            for j in range(0, self.panjang):

                print '*',

            print ""

    

    def gambar_persegi_panjang_tanpa_isi(self):

        for i in range(0, self.lebar):

            if i > 0 and i < self.lebar-1:

                for j in range(0, self.panjang):

                    if j > 0 and j < self.panjang-1:

                        print '  ',

                    else:

                        print '*',

            else:

                for j in range(0, self.panjang):

                    print '*',

                    

            print ""

    

    

PersegiPanjangA = PersegiPanjang(20, 10)

PersegiPanjangB = PersegiPanjang(10, 5)

print "Panjang persegi panjang A :", PersegiPanjangA.panjang

print "Lebar persegi panjang A :", PersegiPanjangA.lebar

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 :", PersegiPanjangB.panjang

print "Lebar persegi panjang B :", PersegiPanjangB.lebar

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 memakai  karakteristik suatu kelas pada kelas yang ingin memakai  

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):

        self.panjang = panjang

        self.lebar = lebar

    

    def hitung_luas(self):

        return self.panjang * self.lebar

    

    def hitung_keliling(self):

        return (2*self.panjang) + (2*self.lebar)

    def gambar_persegi_panjang(self):

        for i in range(0, self.lebar):

            for j in range(0, self.panjang):

                print '*',

            print ""

    

    def gambar_persegi_panjang_tanpa_isi(self):

        for i in range(0, self.lebar):

            if i > 0 and i < self.lebar-1:

                for j in range(0, self.panjang):

                    if j > 0 and j < self.panjang-1:

                        print '-',

                    else:

                        print '*',

            else:

                for j in range(0, self.panjang):

                    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,  segitiga.py  yang  berisi  class  segitiga,  dan 

persegi.py yang berisi class  persegi. Di dalam file segitiga.py dan persegi.py 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  persegi.py,  segitiga.py,  dan 

__init__.py.

listing : persegi.py 

class Persegi:

    def __init__(self, s):

        self.sisi = s

    

    def SetSisi(self, s):

        self.sisi = s

    

    def GetSisi(self):

        return self.sisi

90

    

    def HitungKeliling(self):

        return 4 * self.sisi

    

    def HitungLuas(self):

        return self.sisi * self.sisi

Kode persegi.py 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 persegi.py di dalam folder bidang. 

listing : segitiga.py 

import math

class Segitiga:

    def __init__(self, a, t):

        self.alas = a

        self.tinggi = t

    

    def SetAlas(self, a):

        self.alas = a

    

    def GetAlas(self):

        return self.alas

    

    def SetTinggi(self, t):

        self.tinggi = t

    

    def GetTinggi(self):

        return self.tinggi

    

    def GetSisiMiring(self):

        return math.sqrt(self.alas**2 + self.tinggi**2)

        

    def HitungKeliling(self, s):

        return self.alas + self.tinggi + s

    

    def HitungLuas(self):

        return (self.alas * self.tinggi) / 2

Hampir  sama  dengan  fungsi  dari  module persegi.py,  hanya  saja  module segitiga.py  akan  diisi 

berbagai jenis segitiga. Selain itu pada kode diatas kita memanggil module math karena saat nanti 

module segitiga.py ini diload, kode yang memakai  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 segitiga.py dan persegi.py. Sedangkan kode dibawahnya digunakan 

jika file __init__.py ingin menjalankan perintah tertentu. Pastikan file ini disimpan di folder bidang. 

memakai  Module di File Utama

Sampai akhirnya kita tiba untuk menulis kode utama.  Kode utama ini merupakan kode yang berisi  

runnable code, dan memakai  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 : main.py 

92

from bidang import Segitiga, Persegi

sgtgA = Segitiga(3, 9)

prsgA = Persegi(5)

print "Luas Segitiga A : ", sgtgA.HitungLuas()

print "Sisi Miring Segitiga A : ", sgtgA.GetSisiMiring()

print "Keliling Segitiga A : ", sgtgA.HitungKeliling(sgtgA.GetSisiMiring())

print "\n"

print "Luas Persegi A : ", prsgA.HitungLuas()

print "Keliling Segitiga A : ", prsgA.HitungKeliling()

 

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 main.py  >>

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 memakai  Python

Django

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, 

caching, dan lain – lain.

 

Lebih  lengkap  kungjungi  link  berikut  : 

http://www.djangoproject.com

PyGame

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

 event, mengelola event dan antrian event

 font, membuat dan memakai  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 memakai  Pygame 

lebih  lanjut  bisa  kunjungi  link  berikut  : 

http://www.pygame.org

95

Panda 3D

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 

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  : 

http://www.panda3d.org

SimpleCV

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, 

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   : 

http://www.simplecv.org

NLTK

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 

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  : 

http://www.nltk.org

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  : 

http://www.flask.org

97