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