Pada program yang selama ini kita buat, kita mendesain program kita berdasarkan fungsi [blok statemen yang memanipulasi data]. Hal ini disebut pemrograman procedure-oriented.
Ada cara lain untuk mengorganisasi program dengan menggabungkan data dan operasi yang dibungkus dalam suatu obyek yaitu paradigma pemrograman berorientasi obyek.
Obyek memiliki field berupa variabel obyek dan method berupa fungsi obyek. Keduanya disebut atribut obyek. Class juga dapat memiliki field class [variabel class] dan method class. Class didefinisikan dengan keyword class.
this -> self¶
Dalam deklarasi method pada class terdapat perbedaan yaitu ada parameter pertama yang harus ditambahkan pada parameter fungsi. Parameter ini diberi nama self, nilai dari parameter ini menunjuk ke obyek / instance itu sendiri.
Catatan
programmer Java, C# dan C++ terbiasa dengan keyword this. Bedanya untuk Python variabel ini dikirim ke method secara eksplisit.
Nilai self ini disediakan oleh Python. Contoh, ada class ClassSaya yang mempunyai instance obyek obyeksaya. Ketika method dipanggil pada obyek obyeksaya.method[arg1, arg2], secara otomatis diubah oleh Python menjadi ClassSaya.method[obyeksaya, arg1, arg2].
Class¶
Berikut contoh class yang sederhana.
# lat31.py class Orang: pass org = Orang[] print[org]
jika dijalankan akan mengeluarkan
Menunjukkan variabel org adalah instance class Orang pada alamat memory 0x7f67decc9bd8.
Method Obyek¶
Berikut contoh deklarasi method pada class.
# lat32.py class Orang: def katakanHalo[self]: print 'Halo, apa kabar?' org = Orang[] org.katakanHalo[]
Catatan
Perhatikan walaupun method katakanHalo tidak membaca parameter, masih ada self pada deklarasi method.
Method init¶
Ada nama-nama method spesial pada class Python. __init__ adalah salah satunya, method ini akan dijalankan ketika obyek dibuat. Method ini berguna untuk melakukan inisialisasi. Perhatikan garis bawah dua kali di awal dan di akhir method [double underscore, dunder].
# lat33.py class Orang: def __init__[self, nama]: self.nama = nama def katakanHalo[self]: print 'Halo, nama saya %s, apa kabar?' % self.nama org = Orang['budi'] org.katakanHalo[]
Variabel Class dan Variabel Obyek [Instance]¶
Variabel Class yaitu variabel yang dimiliki oleh class, sedangkan variabel obyek adalah variabel yang yang dimiliki oleh tiap-tiap obyek instance dari class.
# lat34.py class Orang: # variabel class, untuk menghitung jumlah orang total = 0 def __init__[self, nama]: # inisiasi data, data yang dibuat pada self merupakan variabel obyek self.nama = nama # ketika ada orang yang dibuat, tambahkan total orang Orang.total += 1 def __del__[self]: # kurangi total orang jika obyek dihapus Orang.total -= 1 def katakanHalo[self]: print 'Halo, nama saya %s, apa kabar?' % self.nama def total_populasi[cls]: print 'Total Orang %s' % cls.total # method class total_populasi = classmethod[total_populasi] org = Orang['budi'] org.katakanHalo[] Orang.total_populasi[] org2 = Orang['andi'] org2.katakanHalo[] Orang.total_populasi[] print 'obyek dihapus' del org del org2 Orang.total_populasi[]
Inheritance¶
Salah satu keuntungan dari OOP adalan penggunaan ulang kode dan salah satu caranya yaitu menggunakan mekanisme inheritance / turunan.
# lat35.py # base class / superclass class AnggotaSekolah: "representasi anggota sekolah" def __init__[self, nama, umur]: self.nama = nama self.umur = umur print 'membuat anggota sekolah baru: %s' % self.nama def info[self]: "cetak info" print 'Nama: %s, Umur: %s' % [self.nama, self.umur] # subclass class Guru[AnggotaSekolah]: "representasi guru" def __init__[self, nama, umur, gaji]: AnggotaSekolah.__init__[self, nama, umur] self.gaji = gaji print 'membuat guru: %s' % self.nama def info[self]: AnggotaSekolah.info[self] print 'Gaji: %s' % self.gaji # subclass class Siswa[AnggotaSekolah]: "representasi siswa" def __init__[self, nama, umur, nilai]: AnggotaSekolah.__init__[self, nama, umur] self.nilai = nilai print 'membuat siswa: %s' % self.nama def info[self]: AnggotaSekolah.info[self] print 'Nilai: %s' % self.nilai guru = Guru['Budi', 40, 3000000] siswa = Siswa['Andi', 25, 75] # cetak baris kosong print anggota = [guru, siswa] for orang in anggota: orang.info[]