Dekorator dalam Python adalah fungsi yang menggunakan fungsi lain sebagai argumen dan memperluas perilakunya tanpa memodifikasinya secara eksplisit. Ini adalah salah satu fitur Python yang paling kuat. Ini memiliki beberapa penggunaan di dunia nyata seperti logging, debugging, otentikasi, mengukur waktu eksekusi, dan banyak lagi Show
Ruang Lingkup Pasal
PerkenalanMisalkan Anda memiliki sekumpulan fungsi dan Anda hanya ingin pengguna yang diautentikasi untuk mengaksesnya Oleh karena itu, Anda perlu memeriksa apakah pengguna diautentikasi atau tidak sebelum melanjutkan dengan kode lainnya di dalam fungsi Salah satu cara untuk melakukannya adalah dengan memanggil fungsi terpisah di dalam semua fungsi dan menggunakan pernyataan bersyarat. Tapi ini mengharuskan kita mengubah kode untuk setiap fungsi Solusi yang lebih baik di sini adalah menggunakan Dekorator Dekorator hanyalah sebuah fungsi yang mengambil fungsi lain sebagai argumen dan memperluas perilakunya tanpa memodifikasinya secara eksplisit Ini berarti dekorator menambahkan fungsionalitas baru ke suatu fungsi Di akhir artikel ini, Anda akan memahami apa artinya "memperluas fungsi tanpa benar-benar memodifikasinya". Prasyarat untuk Belajar DekoratorUntuk memahami dekorator dengan Python, Anda harus memiliki pemahaman tentang konsep-konsep berikut
Jangan khawatir. Kita akan membahas hal-hal ini di bagian selanjutnya. Jika Anda sudah terbiasa, silakan lewati Membawa pergi
Fungsi dalam PythonFungsi mengembalikan nilai berdasarkan argumen yang diberikan Misalnya, fungsi berikut mengembalikan dua kali angka
Fungsi tingkat tinggi adalah fungsi yang mengambil fungsi sebagai argumen atau mengembalikan fungsi Fungsi DalamKita dapat mendefinisikan suatu fungsi di dalam fungsi lainnya. Fungsi seperti itu disebut fungsi dalam atau fungsi bersarang. Dekorator di Python juga menggunakan fungsi dalam Sebagai contoh, berikut adalah fungsi dengan dua fungsi dalam _ Catatan 📝 Fungsi dalam dicakup secara lokal ke induknya. Mereka tidak tersedia di luar fungsi induk. Jika Anda mencoba memanggil anak_pertama di luar badan induk, Anda akan mendapatkan NameError Fungsi dalam dapat mengakses variabel di lingkup luar fungsi terlampir. Pola ini dikenal sebagai Penutupan Perhatikan contoh berikut _ Membawa pergi
Pengantar DekoratorSekarang kita memiliki pengetahuan prasyarat untuk memahami dekorator, mari kita lanjutkan belajar tentang dekorator Python Seperti yang telah dibahas sebelumnya, dekorator dalam Python digunakan untuk memodifikasi perilaku suatu fungsi tanpa benar-benar mengubahnya Sintaksis dimana func adalah fungsi yang dihias dan dekorator adalah fungsi yang digunakan untuk menghiasnya Mari kita lihat contoh untuk memahami apa artinya ini _
Baris paling penting dalam kode adalah ini _0 Membawa pergi
Dekorator SintaksisPola dekorator di atas menjadi populer di komunitas Python tetapi agak janggal. Kita harus menulis nama fungsi tiga kali dan dekorasinya agak tersembunyi di bawah definisi fungsi Oleh karena itu, Python memperkenalkan cara baru untuk menggunakan dekorator dengan menyediakan gula sintaksis dengan simbol @ Sintaksis _1 Membawa pergi
Mempertahankan Nama Asli dan Docstring dari Fungsi yang DihiasiDalam Python, fungsi memiliki atribut nama dan docstring untuk membantu proses debug dan dokumentasi Lihat contoh berikut (kami menggunakan dekorator yang sama yang dibuat sebelumnya) _4 Membawa pergi
Menggunakan kembali DekoratorDekorator hanyalah fungsi Python biasa. Oleh karena itu, kita dapat menggunakannya kembali untuk mendekorasi berbagai fungsi Mari buat sebuah file bernama dekorator. py dengan kode berikut _8 Membawa pergi
Fungsi Dekorator dengan ParameterBagaimana jika fungsi yang kita dekorasi memiliki beberapa parameter? Mari kita coba dengan sebuah contoh 0 Membawa pergi
Mengembalikan Nilai dari Fungsi yang DihiasiApa yang terjadi pada nilai yang dikembalikan dari fungsi yang didekorasi? Pertimbangkan fungsi add berikut, ia mencetak pernyataan lalu mengembalikan jumlah dari dua angka, kami menghiasnya dengan dekorator do_twice yang dibuat sebelumnya _4 Membawa pergi
Dekorator dengan ArgumenAnda dapat meneruskan argumen ke dekorator itu sendiri Mari kita lihat apa artinya ini dengan kode untuk lebih memahaminya Sebelumnya, kita membuat dekorator bernama do_twice. Sekarang, kami akan memperpanjangnya untuk mengulang beberapa kali. Sebut saja pengulangan dekorator baru ini _8
0
1
2 Membawa pergi
Dekorator RantaiMerangkai dekorator berarti kita dapat menerapkan banyak dekorator ke satu fungsi. Ini juga disebut dekorator bersarang Pertimbangkan dua dekorator berikut 5
Sekarang, kita akan menggunakan kedua dekorator pada satu fungsi dengan menumpuknya seperti ini 6 Membawa pergi
Dekorator MewahAnda memerlukan pemahaman dasar tentang class di Python untuk bagian ini Saya merekomendasikan untuk membaca artikel Kelas dalam Python di Topik Scaler jika Anda tidak terbiasa dengan kelas Sampai sekarang, Anda telah melihat bagaimana menggunakan dekorator pada fungsi. Anda juga dapat menggunakan dekorator dengan kelas, ini dikenal sebagai dekorator mewah di Python. Ada dua cara yang mungkin untuk melakukan ini
Dekorasi Metode KelasPython menyediakan dekorator bawaan berikut untuk digunakan dengan metode kelas
Mari kita lihat contoh dari ketiga dekorator tersebut _9 Membawa pergi
Kelas sebagai DekoratorKita juga bisa menggunakan class sebagai dekorator. Kelas adalah opsi terbaik untuk menyimpan status beberapa data, jadi mari kita pahami cara mengimplementasikan dekorator stateful dengan kelas yang akan mencatat jumlah panggilan yang dibuat untuk suatu fungsi Ada dua persyaratan untuk menjadikan kelas sebagai dekorator
Perhatikan juga bahwa kami menggunakan functools. update_wrapper bukan functools. membungkus dalam kasus kelas sebagai dekorator Sekarang, mari kita terapkan kelasnya _2 Membawa pergi
Penggunaan Dekorator di Dunia NyataSalah satu penggunaan dekorator dalam Python adalah untuk mengukur waktu eksekusi suatu fungsi _5 |