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
Ruang Lingkup Pasal
- Artikel ini mendefinisikan dekorator dengan Python
- Pertama-tama kita membahas prasyarat dan kemudian mempelajari lebih lanjut tentang dekorator dan cara menggunakannya dengan benar dengan fungsi dan kelas
- Kami juga membahas penggunaan dekorator di dunia nyata dalam Pemrograman Python
pengantar
Misalkan 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 Dekorator
Untuk memahami dekorator dengan Python, Anda harus memiliki pemahaman tentang konsep-konsep berikut
- Bagaimana fungsi bekerja
- Objek Kelas Satu
- Fungsi Dalam
- Fungsi Tingkat Tinggi
Jangan khawatir. Kita akan membahas hal-hal ini di bagian selanjutnya. Jika Anda sudah terbiasa, silakan lewati
Membawa pergi
- Dekorator adalah fungsi yang mengambil fungsi lain dan memperluas perilaku fungsi terakhir tanpa mengubahnya secara eksplisit
Fungsi dalam Python
Fungsi mengembalikan nilai berdasarkan argumen yang diberikan
Misalnya, fungsi berikut mengembalikan dua kali angka
def twice[number]: return number * 2
Suatu fungsi mungkin juga memiliki efek samping seperti fungsi cetak. Fungsi cetak mengembalikan Tidak Ada sambil memiliki efek samping mengeluarkan string yang diberikan ke konsol
Objek Kelas Satu
Dalam Python, suatu fungsi diperlakukan sebagai objek kelas satu. Ini berarti bahwa suatu fungsi memiliki semua hak seperti variabel lainnya dalam bahasa
Itu sebabnya, kita dapat menetapkan fungsi ke variabel, meneruskannya ke fungsi, atau mengembalikannya dari fungsi. Sama seperti variabel lainnya
Menetapkan fungsi ke variabel
Anda dapat menetapkan fungsi ke variabel sebagai berikut
_def foo[]: print["I am foo"] also_foo = foo foo[] also_foo[]
Keluaran
Penjelasan
Karena semuanya adalah objek dalam Python, nama yang kita definisikan hanyalah pengidentifikasi yang mereferensikan objek-objek ini
Jadi, foo dan also_foo menunjuk ke objek fungsi yang sama seperti yang ditunjukkan di bawah dalam diagram
Itu sebabnya kami mendapat output yang sama dari kedua pemanggilan fungsi
Melewati fungsi ke fungsi lain
Ada beberapa kasus penggunaan untuk meneruskan fungsi sebagai argumen ke fungsi lain di Python. Misalnya, meneruskan fungsi kunci untuk mengurutkan daftar. Dekorator juga menggunakan teknik ini seperti yang akan kita lihat nanti
Suatu fungsi dapat diteruskan ke fungsi lain seperti variabel normal sebagai berikut
def do_twice[func]: func[] func[] def say_hello[]: print["Hello!"] do_twice[say_hello]
Keluaran
Penjelasan
Fungsi do_twice menerima fungsi dan memanggilnya dua kali dalam tubuhnya. Kami mendefinisikan fungsi lain say_hello dan meneruskannya ke fungsi do_twice, sehingga mendapatkan Hello. dua kali dalam output
Mengembalikan fungsi dari suatu fungsi
Mengembalikan fungsi dari suatu fungsi adalah teknik lain yang digunakan oleh dekorator di Python
Kami dapat mengembalikan fungsi dari fungsi sebagai berikut
def return_to_upper[]: return str.upper to_upper = return_to_upper[] print[to_upper["scaler topics"]]
Keluaran
Penjelasan
Sebagai ilustrasi, kami mengembalikan metode atas str dari fungsi return_to_upper. Kami memanggil fungsi dan menyimpan referensi ke fungsi yang dikembalikan di to_upper. Kemudian gunakan untuk mencetak huruf besar "topik penskalaan"
Fungsi tingkat tinggi adalah fungsi yang mengambil fungsi sebagai argumen atau mengembalikan fungsi
Fungsi Dalam
Kita 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
_def parent[]: print["I am the parent function"] def first_child[]: print["I am the first child function"] def second_child[]: print["I am the second child function"] first_child[] second_child[] parent[]
Keluaran
I am the parent function I am the first child function I am the second child function
Penjelasan
Kami membuat dua fungsi di dalam induk fungsi dan kemudian memanggil keduanya di badan fungsi induk. Urutan di mana kita mendefinisikan fungsi bagian dalam tidak menjadi masalah. Outputnya hanya bergantung pada urutan pemanggilan fungsi
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
_def outer[message]: def inner[]: print["Message:", message] return inner hello_msg = outer["Hello!"] hello_msg[] bye_msg = outer["Bye!"] bye_msg[]
Keluaran
Message: Hello! Message: Bye!
Penjelasan
Pesan diingat oleh fungsi dalam bahkan setelah fungsi luar selesai dieksekusi. Teknik di mana beberapa data dilampirkan ke kode ini disebut penutupan dengan Python
Membawa pergi
- Fungsi adalah objek kelas satu di Python
Pengantar Dekorator
Sekarang 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
_def decorator[func]: def wrapper[]: print["This is printed before the function is called"] func[] print["This is printed after the function is called"] return wrapper def say_hello[]: print["Hello! The function is executing"] say_hello = decorator[say_hello] say_hello[]
Keluaran
_This is printed before the function is called Hello! The function is executing This is printed after the function is called
Penjelasan
Kami memiliki dua fungsi di sini
- penghias. Ini adalah fungsi dekorator, ia menerima fungsi lain sebagai argumen dan "menghiasinya" yang berarti memodifikasinya dengan cara tertentu dan mengembalikan versi yang dimodifikasi
Di dalam fungsi dekorator, kita mendefinisikan fungsi dalam lain yang disebut pembungkus. Ini adalah fungsi aktual yang melakukan modifikasi dengan membungkus fungsi yang diteruskan func
dekorator mengembalikan fungsi pembungkus - katakan halo. Ini adalah fungsi biasa yang perlu kita hias. Di sini, yang dilakukan hanyalah mencetak pernyataan sederhana
Baris paling penting dalam kode adalah ini
_0def foo[]: print["I am foo"] also_foo = foo foo[] also_foo[]
Kami meneruskan fungsi say_hello ke fungsi dekorator. Akibatnya, say_hello sekarang menunjuk ke fungsi pembungkus yang dikembalikan oleh dekorator
Namun, fungsi pembungkus memiliki referensi ke say_hello[] asli sebagai func, dan memanggil fungsi tersebut di antara dua panggilan ke print[]
Membawa pergi
- Fungsi dekorator memodifikasi fungsi dengan membungkusnya dalam fungsi pembungkus
Dekorator Sintaksis
Pola 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
_1def foo[]: print["I am foo"] also_foo = foo foo[] also_foo[]
Gula sintaksis adalah sintaks dalam bahasa pemrograman yang dirancang untuk membuat sesuatu lebih mudah dibaca atau diekspresikan
Contoh berikut melakukan hal yang sama seperti contoh sebelumnya
_2def foo[]: print["I am foo"] also_foo = foo foo[] also_foo[]
Keluaran
_This is printed before the function is called Hello! The function is executing This is printed after the function is called
Penjelasan
Keluaran dan kerjanya sama dengan contoh sebelumnya, satu-satunya hal yang berubah adalah kita menggunakan @decorator alih-alih say_hello = dekorator[say_hello]
Membawa pergi
- Kita dapat dengan mudah mendekorasi sebuah fungsi menggunakan sintaks @decorator
Mempertahankan Nama Asli dan Docstring dari Fungsi yang Dihiasi
Dalam Python, fungsi memiliki atribut nama dan docstring untuk membantu proses debug dan dokumentasi
Namun, saat kita mendekorasi sebuah fungsi, identitasnya diubah menjadi fungsi pembungkus
Lihat contoh berikut [kami menggunakan dekorator yang sama yang dibuat sebelumnya]
_4def foo[]: print["I am foo"] also_foo = foo foo[] also_foo[]
Keluaran
_5def foo[]: print["I am foo"] also_foo = foo foo[] also_foo[]
Meskipun secara teknis benar, ini bukanlah yang kami inginkan. Karena say_hello sekarang menunjuk ke fungsi pembungkus, ia menampilkan informasinya alih-alih fungsi aslinya
Untuk memperbaikinya, kita perlu menggunakan dekorator lain bernama wraps pada fungsi wrapper
Dekorator wraps diimpor dari modul functools bawaan
Beginilah Cara kita melakukanya
_6def foo[]: print["I am foo"] also_foo = foo foo[] also_foo[]
Keluaran
_7def foo[]: print["I am foo"] also_foo = foo foo[] also_foo[]
Kali ini, kami mendapatkan docstring yang benar dari fungsi bantuan dan nama yang benar dari atribut __name__
Membawa pergi
- Gunakan functools. membungkus dekorator untuk mempertahankan nama asli dan docstring dari fungsi yang didekorasi
Menggunakan kembali Dekorator
Dekorator 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
_8def foo[]: print["I am foo"] also_foo = foo foo[] also_foo[]
do_twice adalah dekorator sederhana yang memanggil fungsi yang didekorasi dua kali
Sekarang, Anda dapat menggunakan kembali dekorator do_twice beberapa kali dengan mengimpornya
Ini sebuah contoh
_9def foo[]: print["I am foo"] also_foo = foo foo[] also_foo[]
Keluaran
Penjelasan
Kami mengimpor any menggunakan dekorator do_twice pada kedua fungsi dan memanggilnya. Oleh karena itu, kami mendapat dua keluaran untuk setiap fungsi
Membawa pergi
- Dekorator dapat digunakan kembali seperti fungsi lainnya
Fungsi Dekorator dengan Parameter
Bagaimana jika fungsi yang kita dekorasi memiliki beberapa parameter?
Mari kita coba dengan sebuah contoh
0def do_twice[func]: func[] func[] def say_hello[]: print["Hello!"] do_twice[say_hello]
Keluaran
1def do_twice[func]: func[] func[] def say_hello[]: print["Hello!"] do_twice[say_hello]
Penjelasan
Kami mendapat kesalahan karena fungsi pembungkus yang kami definisikan di dalam dekorator tidak menerima argumen apa pun
Cara langsung untuk menyelesaikan ini adalah dengan membiarkan pembungkus menerima satu argumen, tetapi kemudian kita tidak akan dapat menggunakan dekorator do_twice dengan fungsi dengan lebih dari satu argumen
Jadi, solusi yang lebih baik adalah menerima sejumlah variabel argumen dalam fungsi pembungkus dan kemudian meneruskan argumen tersebut ke fungsi asli func
Inilah cara Anda melakukannya
2def do_twice[func]: func[] func[] def say_hello[]: print["Hello!"] do_twice[say_hello]
Keluaran
_3def do_twice[func]: func[] func[] def say_hello[]: print["Hello!"] do_twice[say_hello]
Penjelasan
*args dan **kwargs memungkinkan kita untuk meneruskan beberapa argumen atau argumen kata kunci ke suatu fungsi
Jadi, kami memberikan "Kitty" sebagai nama ke say_hello yang diterima oleh fungsi pembungkus dan fungsi pembungkus menggunakannya untuk memanggil fungsi func yang sebenarnya. Mengeluarkan Hello, Kitty. dua kali
Membawa pergi
- Gunakan sejumlah variabel parameter dalam fungsi pembungkus untuk menangani sejumlah argumen dalam fungsi yang didekorasi
Mengembalikan Nilai dari Fungsi yang Dihiasi
Apa 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
_4def do_twice[func]: func[] func[] def say_hello[]: print["Hello!"] do_twice[say_hello]
Keluaran
5def do_twice[func]: func[] func[] def say_hello[]: print["Hello!"] do_twice[say_hello]
Fungsi add dipanggil dua kali seperti yang diharapkan tetapi kami mendapatkan Tidak ada dalam nilai kembalian. Ini karena fungsi pembungkus tidak mengembalikan nilai apa pun
Untuk memperbaikinya, kita perlu memastikan bahwa fungsi wrapper mengembalikan nilai kembalian dari fungsi yang didekorasi
Inilah cara Anda melakukannya
6def do_twice[func]: func[] func[] def say_hello[]: print["Hello!"] do_twice[say_hello]
Keluaran
7def do_twice[func]: func[] func[] def say_hello[]: print["Hello!"] do_twice[say_hello]
Penjelasan
Kami memanggil fungsi dua kali dalam fungsi pembungkus. Namun kali ini, kami memastikan untuk mengembalikan nilai panggilan kedua kembali ke penelepon
Sekarang, kita mendapatkan jumlah yang benar
Membawa pergi
- Fungsi pembungkus harus mengembalikan nilai kembalian dari fungsi yang dihias, jika tidak, akan hilang
Dekorator dengan Argumen
Anda dapat meneruskan argumen ke dekorator itu sendiri
Yang perlu Anda lakukan hanyalah mendefinisikan dekorator di dalam fungsi lain yang menerima argumen dan kemudian menggunakan argumen tersebut di dalam dekorator. Anda juga perlu mengembalikan dekorator dari fungsi penutup
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
_8def do_twice[func]: func[] func[] def say_hello[]: print["Hello!"] do_twice[say_hello]
Keluaran
_9def do_twice[func]: func[] func[] def say_hello[]: print["Hello!"] do_twice[say_hello]
Penjelasan
Mari kita pecahkan kodenya
- Pembungkus fungsi paling dalam mengambil sejumlah variabel argumen dan kemudian memanggil fungsi yang didekorasi num_times kali. Ini akhirnya mengembalikan nilai kembalian dari fungsi asli yang didekorasi
0def return_to_upper[]: return str.upper to_upper = return_to_upper[] print[to_upper["scaler topics"]]
- Satu tingkat di atas adalah fungsi dekorator_repeat yang melakukan pekerjaan dekorator normal, ia mengembalikan fungsi pembungkus
1def return_to_upper[]: return str.upper to_upper = return_to_upper[] print[to_upper["scaler topics"]]
- Pada tingkat terluar adalah fungsi dekorator berulang yang menerima argumen dan memberikannya ke fungsi bagian dalam menggunakan pola penutupan
2def return_to_upper[]: return str.upper to_upper = return_to_upper[] print[to_upper["scaler topics"]]
Akhirnya, kami menggunakan dekorator dengan tanda kurung [] tidak seperti sebelumnya untuk memberikan argumen
Kesimpulan,
_3def return_to_upper[]: return str.upper to_upper = return_to_upper[] print[to_upper["scaler topics"]]
Setara dengan
_4def return_to_upper[]: return str.upper to_upper = return_to_upper[] print[to_upper["scaler topics"]]
Artinya, repeat dipanggil dengan argumen yang diberikan dan kemudian nilai pengembaliannya [dekorator sebenarnya] dipanggil dengan fungsi say_hello
Dekorator dengan argumen digunakan sebagai pabrik dekorator untuk membuat dekorator baru
Membawa pergi
- Anda dapat meneruskan argumen ke dekorator dengan membungkusnya di dalam fungsi dekorator lain
Dekorator Rantai
Merangkai dekorator berarti kita dapat menerapkan banyak dekorator ke satu fungsi. Ini juga disebut dekorator bersarang
Pertimbangkan dua dekorator berikut
5def return_to_upper[]: return str.upper to_upper = return_to_upper[] print[to_upper["scaler topics"]]
- Yang pertama mengambil fungsi yang mengembalikan string dan kemudian membaginya menjadi daftar kata
- Yang kedua mengambil fungsi yang mengembalikan string dan mengubahnya menjadi huruf besar
Sekarang, kita akan menggunakan kedua dekorator pada satu fungsi dengan menumpuknya seperti ini
6def return_to_upper[]: return str.upper to_upper = return_to_upper[] print[to_upper["scaler topics"]]
Keluaran
Penjelasan
Urutan dekorator penting dalam hal ini. To_upper pertama diterapkan ke fungsi say_hello. Kemudian, split_string diterapkan
_7def return_to_upper[]: return str.upper to_upper = return_to_upper[] print[to_upper["scaler topics"]]
setara dengan
8def return_to_upper[]: return str.upper to_upper = return_to_upper[] print[to_upper["scaler topics"]]
Membawa pergi
- Anda dapat menerapkan beberapa dekorator ke satu fungsi dengan menumpuknya di atas satu sama lain
Dekorator Mewah
Anda 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 kelas
- Dekorasi kelas yang lengkap
Dekorasi Metode Kelas
Python menyediakan dekorator bawaan berikut untuk digunakan dengan metode kelas
- @metodekelas. Ini digunakan untuk membuat metode yang terikat ke kelas dan bukan objek kelas. Itu dibagikan di antara semua objek kelas itu. Kelas dilewatkan sebagai parameter pertama ke metode kelas. Metode kelas sering digunakan sebagai metode pabrik yang dapat membuat instance kelas tertentu
- @metode statis. Metode statis tidak dapat memodifikasi status objek atau status kelas karena mereka tidak memiliki akses ke cls atau self. Mereka hanyalah bagian dari ruang nama kelas
- @Properti. Ini digunakan untuk membuat getter dan setter untuk atribut kelas
Mari kita lihat contoh dari ketiga dekorator tersebut
_9def return_to_upper[]: return str.upper to_upper = return_to_upper[] print[to_upper["scaler topics"]]
Penjelasan
Kami membuat kelas yang disebut Browser. Kelas berisi pengambil dan penyetel untuk atribut halaman yang dibuat dengan dekorator @property
Ini berisi metode kelas yang disebut with_incognito yang bertindak sebagai metode pabrik untuk membuat objek jendela penyamaran
Itu juga berisi metode statis untuk mendapatkan informasi untuk browser yang akan sama untuk semua objek [windows]
Dekorasi Kelas Lengkap
Anda juga dapat menggunakan dekorator di seluruh kelas
Menulis dekorator kelas sangat mirip dengan menulis dekorator fungsi. Satu-satunya perbedaan adalah dekorator akan menerima kelas dan bukan fungsi sebagai argumen. Dekorasi kelas tidak menghiasi metodenya. Ini setara dengan yang berikut ini
_0def parent[]: print["I am the parent function"] def first_child[]: print["I am the first child function"] def second_child[]: print["I am the second child function"] first_child[] second_child[] parent[]
Itu hanya menambahkan fungsionalitas ke proses instantiasi kelas
Salah satu contoh paling umum menggunakan dekorator di kelas adalah @dataclass dari modul dataclasses
_1def parent[]: print["I am the parent function"] def first_child[]: print["I am the first child function"] def second_child[]: print["I am the second child function"] first_child[] second_child[] parent[]
Kelas data adalah kelas yang sebagian besar berisi data. Muncul dengan fungsionalitas dasar yang sudah diterapkan. Kita dapat membuat instance, mencetak, dan membandingkan instance kelas data secara langsung
Nama pengguna. sintaks str disebut tipe petunjuk di Python. Petunjuk jenis adalah sintaks khusus yang memungkinkan untuk mendeklarasikan jenis variabel
Editor dan alat menggunakan jenis petunjuk ini untuk memberikan dukungan yang lebih baik seperti pelengkapan otomatis dan pemeriksaan kesalahanDalam contoh, kami telah membuat kelas bernama Pengguna yang menyimpan data yang terkait dengan pengguna. Kemudian, kami membuat pengguna dan mencetak nama penggunanya
Membawa pergi
- Dekorator dapat digunakan dengan metode kelas atau seluruh kelas
Kelas sebagai Dekorator
Kita 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
- Fungsi __init__ perlu menggunakan fungsi sebagai argumen
- Kelas perlu mengimplementasikan metode __call__. Ini diperlukan karena kelas akan digunakan sebagai dekorator dan dekorator harus berupa objek yang dapat dipanggil
Perhatikan juga bahwa kami menggunakan functools. update_wrapper bukan functools. membungkus dalam kasus kelas sebagai dekorator
Sekarang, mari kita terapkan kelasnya
_2def parent[]: print["I am the parent function"] def first_child[]: print["I am the first child function"] def second_child[]: print["I am the second child function"] first_child[] second_child[] parent[]
Sekarang, gunakan kelas sebagai dekorator sebagai berikut
_3def parent[]: print["I am the parent function"] def first_child[]: print["I am the first child function"] def second_child[]: print["I am the second child function"] first_child[] second_child[] parent[]
Setelah dekorasi, metode __call__ kelas dipanggil sebagai ganti metode say_hello
Keluaran
_4def parent[]: print["I am the parent function"] def first_child[]: print["I am the first child function"] def second_child[]: print["I am the second child function"] first_child[] second_child[] parent[]
Membawa pergi
- Kelas juga dapat digunakan sebagai dekorator dengan mengimplementasikan metode __call__ dan meneruskan fungsi ke __init__ sebagai argumen
Penggunaan Dekorator di Dunia Nyata
Salah satu penggunaan dekorator dalam Python adalah untuk mengukur waktu eksekusi suatu fungsi
Perhatikan contoh berikut
_5def parent[]: print["I am the parent function"] def first_child[]: print["I am the first child function"] def second_child[]: print["I am the second child function"] first_child[] second_child[] parent[]
Keluaran
_6def parent[]: print["I am the parent function"] def first_child[]: print["I am the first child function"] def second_child[]: print["I am the second child function"] first_child[] second_child[] parent[]
Penjelasan
Fungsi wrapper dekorator ukuran menggunakan fungsi waktu dari modul waktu untuk menghitung selisih waktu antara awal dan akhir eksekusi fungsi dan kemudian mencetaknya di konsol
Fungsi mengantuk hanya digunakan sebagai ilustrasi, ia menggunakan fungsi tidur dari modul waktu untuk membekukan eksekusi selama jangka waktu tertentu. Kita dapat mengukur waktu eksekusi fungsi lain dengan cara yang sama
Apa yang benar tentang dekorator dengan Python?
Dekorator dalam Python adalah fungsi yang menggunakan fungsi lain sebagai argumennya, dan mengembalikan fungsi lain lagi . Dekorator bisa sangat berguna karena memungkinkan perluasan fungsi yang ada, tanpa modifikasi apa pun pada kode sumber fungsi asli.Manakah dari berikut ini yang merupakan dekorator dengan Python?
Dekorator adalah pola desain dalam Python yang memungkinkan pengguna menambahkan fungsionalitas baru ke objek yang sudah ada tanpa mengubah strukturnya . Dekorator biasanya dipanggil sebelum definisi fungsi yang ingin Anda hias.Manakah dari berikut ini yang benar tentang dekorator properti di Python?
b. dekorator properti digunakan untuk menyetel atau mendapatkan atribut .Apa arti dekorator dalam Python?
Dekorator menyediakan sintaks sederhana untuk memanggil fungsi tingkat tinggi. Menurut definisi, dekorator adalah fungsi yang mengambil fungsi lain dan memperluas perilaku fungsi terakhir tanpa mengubahnya secara eksplisit .