Dekorator Python: Fungsi Pembungkus & Memodifikasi
Pelajari dekorator Python untuk mengubah perilaku fungsi secara dinamis. Pahami fungsi wrapper, @ sintaksis, dan argumen penanganan di dekorator.
Ikhtisar
Dekorator adalah salah satu pola desain Python yang paling elegan dan kuat. Mereka mengizinkan pengembang untuk memodifikasi atau memperluas perilaku suatu fungsi, metode, atau kelas tanpa mengubah kode sumbernya secara permanen. Bayangkan dekorator membungkus suatu fungsi di dalam fungsi lain untuk menjalankan langkah-langkah sebelum dan sesudah pemrosesan. Hal ini membuat dekorator sempurna untuk menerapkan masalah lintas sektoral seperti logging, pengaturan waktu, validasi, atau kontrol akses.
Pada intinya, dekorator bekerja karena fungsi Python adalah warga negara kelas satu. Ini berarti fungsi dapat diteruskan sebagai argumen ke fungsi lain, dikembalikan dari fungsi, dan ditetapkan ke variabel. Dekorator hanyalah sebuah fungsi yang mengambil fungsi lain sebagai argumen, mendefinisikan fungsi pembungkus bersarang yang menjalankan fungsi asli bersama dengan beberapa logika tambahan, dan mengembalikan fungsi pembungkus ini untuk menggantikan fungsi asli.
Untuk membuat penerapan dekorator menjadi sederhana dan bersih, Python menyediakan gula sintaksis `@decorator_name`, yang ditempatkan tepat di atas definisi fungsi target. Saat memanggil fungsi yang dihias, Python malah memanggil pembungkusnya. Jika fungsi menerima parameter, wrapper harus menerima argumen arbitrer (`*args` dan `**kwargs`) dan meneruskannya dengan benar. Memahami dekorator memungkinkan Anda menulis kode yang sangat modular, bersih, dan KERING (Jangan Ulangi Sendiri).
Kode & Output Eksekusi
Dekorator khusus yang melacak dan mencatat detail eksekusi fungsi.
def call_tracker(func):
"""Decorator that tracks and logs function execution details."""
def wrapper(*args, **kwargs):
print(f"Calling {func.__name__} with args: {args}")
result = func(*args, **kwargs)
print(f"{func.__name__} returned: {result}")
return result
return wrapper
@call_tracker
def multiply(a, b):
return a * b
# Calling the decorated function
result = multiply(5, 4)Calling multiply with args: (5, 4)
multiply returned: 20Implementasi Langkah demi Langkah
- Mencatat metrik waktu proses ke monitor kinerja
- Menerapkan pemeriksaan otentikasi dan otorisasi pada rute
- Menyimpan atau menyimpan hasil komputasi yang mahal
Pertanyaan yang Sering Diajukan
Bagaimana cara dekorator menangani argumen?
Dengan menggunakan *args dan **kwargs dalam fungsi wrapper bersarang, yang memungkinkannya menerima dan meneruskan parameter posisi atau kata kunci apa pun ke fungsi wrapper.
Bisakah Anda menerapkan banyak dekorator ke satu fungsi?
Ya, Anda bisa menumpuknya. Mereka akan dieksekusi secara berurutan dari atas ke bawah (bungkus terdalam hingga terluar).
Topik Terkait
Fungsi master Python. Pelajari cara menulis kode yang dapat digunakan kembali menggunakan def, menentukan argumen, mengembalikan nilai, dan memahami cakupan lokal dan global.
Manajer Konteks PythonPelajari cara menulis pengelola konteks khusus dengan Python. Kuasai dekorator manajer konteks dan metode __enter__/__exit__ untuk keamanan sumber daya.
Sumber Daya Python yang Direkomendasikan
Perluas pengetahuan Anda dengan tutorial interaktif terkait, lembar contekan, dan perbandingan kode.
Cara Mengurutkan Daftar dengan Python
Pelajari cara mengurutkan daftar dengan Python menggunakan metode sortir() dan fungsi sortir(). Temukan contoh pengurutan kunci khusus dan urutan terbalik.
Lembar
Panduan referensi lengkap untuk manipulasi string Python. Kuasai pemformatan, pencarian, pemisahan, penggantian, dan pemeriksaan properti string.
Python vs JavaScript: Bahasa Pemrograman Mana yang Terbaik?
Perbandingan komprehensif antara Python dan JavaScript. Jelajahi perbedaan sintaksis, kinerja, kasus penggunaan (backend vs frontend), dan contoh pengkodean.