Disusun Oleh:
Arif Fadllullah
A. TUJUAN
B. PETUNJUK
- Awali setiap praktikum dengan berdoa agar mendapatkan keberkahan dan kemudahan
dalam mengerjakan praktikum.
- Baca modul dengan seksama dan pahami tujuan dan dasar teori dengan baik.
- Kerjakan latihan-latihan dan tugas-tugas praktikum dengan baik, benar, sabar, teliti, dan
jujur.
- Tanyakan kepada asisten praktikum/dosen pengampu apabila ada hal dalam modul yang
kurang jelas.
C. DASAR TEORI
1. Decorator
Output:
Output:
Pada contoh di atas, fungsi tampil() dapat mengakses variabel nama yang terdapat
yang terdapat pada fungsi induknya (di luar fungsinya sendiri). Dalam hal ini, fungsi
tampil() mengakses variabel non-lokal. Sehingga, output fungsi mahasiswaUBT(“Rio
Marsonly”) dapat ditampilkan pada layar. Untuk bisa menjalankan fungsi
mahasiswaUBT(), pengguna harus memberikan argumen wajib pada fungsi tersebut, karena
dari awal sudah didefinisikan sebagai fungsi dengan argumen.
Apabila pengguna tidak memasukkan argumen, maka fungsi tersebut tidak dapat
dijalankan alias akan muncul pesan kesalahan. Pertanyaannya adalah apakah program bisa
mengingat sebuah argumen yang telah dimasukkan? sehingga fungsi tersebut dapat dipanggil
tanpa argumen. Disini peran closure, Python menyediakan cara untuk mengingat nilai
dimasukkan pada fungsi dengan cara seperti yang telah kita gunakan pada Gambar 6.4 di
bagian inner function: menyimpan referensi fungsi ke dalam sebuah variabel.
Output:
Dengan demikian, jelas bahwa closure adalah sebuah fungsi yang dapat disimpan dalam
variabel dan biasa dimanfaatkan untuk mewakili (enclose) sebuah proses pada blok tertentu.
Variabel yang menyimpan closure memiliki sifat seperti fungsi yang disimpannya. Dengan
menggunakan closure, fungsi dapat mengembalikan objek (atau fungsi lain) dan mengingat
lingkungan tempat fungsi tersebut diinisiasi. Nilai yang ada pada outer-scope masih diingat
meskipun fungsi tersebut telah dihapus. Closure memiliki peran yang sangat penting dalam
decorator. Closure digunakan untuk menyimpan nilai fungsi yang telah didekorasi.
Output:
Pada contoh di atas, perkenalan() adalah fungsi yang akan dibuat sebagai decorator.
Fungsi decorator akan menerima argumen yang juga merupakan fungsi dengan nama
kabar() sebagai fungsi sederhana tanpa parameter yang berisi cetak “Refanti”.
Fungsi kabar() yang diterima kemudian didekorasi oleh fungsi decorator
perkenalan() dengan menambahkan kata “Hallo” dan “Semoga Sukses Lomba
Karatenya”. Hasil dekorasi kemudian disimpan kembali ke dalam variabel kabar.
Alhasil, ketika kita ingin mencetak kembali fungsi kabar(), isian yang dicetak tidak lagi
berupa nama “Refanti” saja, tetapi berubah menjadi:
Hallo
Refanti
Semoga Sukses Lomba Karatenya
Python memiliki cara yang lebih sederhana untuk mendekorasi fungsi yaitu dengan
menggunakan simbol @ diikuti dengan nama fungsi decorator tersebut. Nama fungsi
decorator ditempatkan di atas fungsi yang akan didekorasi seperti pada Gambar 6.6.
Output:
Gambar 6.6 Mengaktifkan Fungsi Decorator dengan Simbol @ diikuti dengan Nama Fungsi
Decoratornya
Gambar 6.6 menunjukkan cara mengaktifkan fungsi dekorator perkenalan() yang sudah
didefinisikan sebelumnya dengan cara menambahkan simbol @nama_decorator dan
dibawahnya diletakkan fungsi yang dimodifikasi isinya yaitu fungsi kabar(). Kita juga
dapat melihat pada Gambar 6.6 bahwa fungsi kabar() sebelum didekorasi menghasilkan
nilai “Refanti” saja. Sedangkan fungsi kabar() yang telah didekorasi (yang diatasnya
disisipkan @perkenalan) menghasilkan nilai:
Hallo
Refanti
Semoga Sukses Lomba Karatenya
Decorator pada Fungsi Dengan Parameter
Decorator @nama_decorator dapat mendekorasi fungsi dengan argumen. Caranya perlu
ditambahkan argumen *args dan **kwargs di dalam inner function pada fungsi
decoratornya.
Output:
2. Static Method
Pada pertemuan yang lalu, kita pernah membahas tentang static variable atau yang
biasa disebut juga sebagai class variable atau attribute, yaitu variabel yang berada di dalam
kelas yang tidak disandarkan kepada objek atau instan dari kelas tersebut, sehingga bisa
diakses langsung tanpa perlu melakukan instansiasi. Nah, pada kesempatan kali ini, kita
akan membahas hal yang serupa dengan static variable: yaitu static method.
Output:
Gambar 6.8 Membuat Static Method Bernama “nama” di dalam Kelas Mahasiswa
Kita perhatikan bahwa method nama() tidak terlalu membutuhkan properti atau
attribute dari kelas Mahasiswa. Ia hanya membutuhkan sebuah parameter string, baik dari
dalam kelas Mahasiswa atau pun nilai dari luar yang tidak ada sangkut pautnya dengan
kelas Mahasiswa itu sendiri. Untuk itu, method nama() jika ditambahkan argumen
@staticmethod di atasnya, maka method nama() bisa diakses secara langsung
dengan diikuti nama Kelasnya saja atau bisa juga method nama() diakses melalui proses
instansiasi Kelas ke dalam Objek.
3. Class Method
Class method pada python adalah method statis yang disandarkan langsung kepada
sebuah kelas, artinya kita bisa memanggil fungsi tersebut tanpa harus membuat objek terlebih
dahulu. Class method kurang lebih sama dengan staticmethod, sama-sama statis dan sama-
sama bisa dipanggil secara langsung oleh kelasnya maupun dipanggil melalui instansiasi objek.
Meskipun memiliki banyak kemiripan dengan static method, akan tetapi keduanya tetap
saja berbeda. Berikut ini di antara perbedaan antara class method dan static method:
Static method dibuat dengan tidak memiliki informasi tentang kelasnya sendiri, karena
memang tidak membutuhkan properti atau attribute dari dalam kelas. Sedangkan class
method dibuat jika kita perlu memiliki informasi tambahan seperti properti atau attribute
dari kelasnya sendiri untuk kemudian dimasukkan ke dalam class method.
Untuk mendefinisikan static method kita menggunakan decorator @staticmethod,
sedangkan untuk mendefinisikan class method, kita menggunakan decorator
@classmethod.
Keduanya sama-sama bisa dipanggil secara langsung oleh kelasnya maupun dipanggil
melalui instansiasi objek.
Untuk membuat class method pada python, kita cukup menuliskan decorator
@classmethod tepat sebelum mendefinisikan sebuah fungsi dengan catatan sudah membuat
informasi atau mendefinisikan terlebih dahulu tentang kelasnya. Perhatikan Gambar 6.9 berikut
ini.
Output:
Gambar 6.9 Membuat Class Method Bernama “pengertian” di dalam Kelas Manusia
Manusia, maka parameter pertama (yaitu parameter cls) akan berisi properti atau attribute
kelas Manusia yaitu jumlah_tangan dan nama. Parameter pertama ini tidak harus
bernama cls, bisa bernama apa saja akan tetapi isinya tetap sama yaitu properti atau attribute
kelasnya sendiri, berbeda dengan static method yang tidak memiliki parameter tambahan apa
pun dari kelasnya kecuali parameter asli dari dirinya sendiri.
Kapan harus menggunakan instance method, static method, dan class method?
Untuk fungsi-fungsi yang berkaitan secara langsung dengan instance variable dari suatu
objek, gunakan instance method.
Untuk fungsi-fungsi yang bersifat utilitas (helper/bantuan) dan tidak berkaitan secara
langsung dengan instance variable dan juga attribute kelas, gunakanlah static method.
Dan untuk membuat factory method (hampir sama seperti konstruktor dengan use case
berbeda) dengan menyertakan dan memodifikasi nilai properti atau attribute kelas, kita bisa
menggunakan class method.
Output:
Sekarang kita bisa membuat instans dari kelas Mahasiswa dengan mengakses secara otomatis
__str__ method untuk menampilkan data dengan dua cara:
Langsung dari konstruktornya, yaitu __init__ contructor.
Lewat @classmethod yang bernama nilaiBobot()
Dari Gambar 6.1, terlihat bahwa hasil dari konstruktor, karena nilai bobot yang
dimasukkan 0, maka hasil dari nilai tetap 60. Sedangkan ketika menggunakan @classmethod,
nilai bobot dimodifikasi menjadi 20, sehingga hasil dari nilai menjadi 60. Disini terlihat
@classmethod dapat memodifikasi nilai yang akan ditampilkan pada method __str__
melalui method nilaiBobot(). Dengan kata lain method yang didefinisikan di bawah
@classmethod dapat memodifikasi properti dengan nilai berbeda dari konstruktor asal
(__init__ constructor).
Berbeda dengan @classmethod, dimana method yang didefinisikan dengan
@staticmethod tidak dapat mengakses properti atau attribute dan method yang lain dalam
kelas. @staticmethod hanya berfokus parameter yang dimasukkan ke dalam dirinya
sendiri (bukan dari kelasnya) dan tidak bisa diparsing ke method yang lain.
Dari contoh-contoh di atas bisa kita simpulkan bahwa:
a. Class method hampir sama dengan static method di mana keduanya dapat disandarkan
kepada sebuah kelas secara langsung alih-alih kepada instan atau objeknya
b. Class method dapat menangkap dan memiliki informasi tentang kelasnya sendiri sedangkan
static method tidak
c. Class method didefinisikan dengan decorator @classmethod sedangkan static method
menggunakan decorator @staticmethod
d. Class method cocok digunakan untuk factory method (seperti konstruktor akan tetapi dengan
variasi berbeda). Sedangkan static method lebih cocok digunakan untuk fungsi-fungsi
utilitas yang tidak berhubungan secara langsung dengan properti atau attribute kelasnya.
D. LATIHAN PRAKTIKUM
1. Menerapkan Inner Function
Tuliskan skrip python di atas pada lembar kerja visual studio code Anda, kemudian running
(tekan ctrl + F5), lihat dan identifikasi apa yang terjadi. Berikan komentar/penjelasan di setiap
baris skrip Python yang penting dan screenshot hasil eksekusi tampilkan disini:
Tuliskan skrip python di atas pada lembar kerja visual studio code Anda, kemudian modifikasi
pada bagian fungsi decoratornya sehingga ketika running (tekan ctrl + F5), luaran output yang
dihasilkan adalah:
Lihat dan identifikasi apa yang terjadi. Berikan komentar/penjelasan di setiap baris skrip
Python yang penting dan screenshot hasil eksekusi tampilkan disini:
Tuliskan skrip python di atas pada lembar kerja visual studio code Anda, kemudian running
(tekan ctrl + F5), lihat dan identifikasi apa yang terjadi. Berikan komentar/penjelasan di setiap
baris skrip Python yang penting dan screenshot hasil eksekusi tampilkan disini:
Tuliskan skrip python di atas pada lembar kerja visual studio code Anda, kemudian running
(tekan ctrl + F5), Bandingkan dan jelaskan perbedaannya dengan skrip latihan nomor 3.
Berikan komentar/penjelasan di setiap baris skrip Python yang penting dan screenshot hasil
eksekusi tampilkan disini:
Lakukan modifikasi skrip pada fungsi decorator yang ditandai dengan kotak berwarna hijau
(bukan pada fungsi tegangan() yang dimodif), sehingga ketika di running akan
menghasilkan output seperti di bawah ini:
Lihat dan identifikasi apa yang terjadi. Berikan komentar/penjelasan di setiap baris skrip
Python yang penting dan screenshot hasil eksekusi tampilkan disini:
Tuliskan skrip python di atas pada lembar kerja visual studio code Anda, running (tekan ctrl +
F5), jelaskan apa yang berbeda dari tiga print yang dilakukan. Berikan
komentar/penjelasan di setiap baris skrip Python yang penting dan screenshot hasil eksekusi
tampilkan disini:
Tuliskan skrip python di atas pada lembar kerja visual studio code Anda, running (tekan ctrl +
F5), jelaskan apa yang berbeda dari dua print yang dilakukan. Berikan
komentar/penjelasan di setiap baris skrip Python yang penting dan screenshot hasil eksekusi
tampilkan disini:
TUGAS PRAKTIKUM
1. Buatlah program sederhana dengan tema bebas yang memanfaatkan fungsi decorator (Skrip
Python disertai penjelasan dan screenshot hasil eksekusi tampilkan disini)
2. Buatlah sebuah program sederhana dengan tema bebas yang menerapkan @staticmethod
dan @classmethod (Skrip Python disertai penjelasan dan screenshot hasil eksekusi
tampilkan disini)
E. KESIMPULAN
Pengalaman apa yang kamu peroleh setelah mempelajari Modul 6 ini. Silahkan tulis disini:
F. DAFTAR PUSTAKA