Membuat dan Merangkai Dekorator Fungsi dengan Python

Membuat dan Merangkai Dekorator Fungsi dengan Python
Membuat dan Merangkai Dekorator Fungsi dengan Python

Meningkatkan Fungsi Python dengan Dekorator

Di Python, dekorator adalah alat yang ampuh untuk mengubah perilaku fungsi atau metode. Mereka memungkinkan pengembang untuk menggabungkan fungsionalitas tambahan di sekitar fungsi yang ada dengan cara yang bersih dan mudah dibaca. Dengan memahami cara membuat dan merangkai dekorator, Anda dapat meningkatkan modularitas dan keterbacaan kode Anda secara signifikan.

Artikel ini akan memandu Anda melalui proses pembuatan dua dekorator khusus: satu untuk membuat teks tebal dan satu lagi untuk membuat teks miring. Kami juga akan mendemonstrasikan cara merangkai dekorator ini untuk mencapai hasil yang diinginkan. Di akhir tutorial ini, Anda akan dapat memanggil fungsi sederhana dan menerima string yang diformat dengan tag HTML tebal dan miring.

Memerintah Keterangan
def Mendefinisikan fungsi dengan Python.
f"<b>{func()}</b>" Menggunakan pemformatan f-string untuk membungkus nilai kembalian fungsi dalam tag HTML tebal.
return wrapper Mengembalikan fungsi pembungkus bagian dalam, yang secara efektif menciptakan dekorator.
@make_bold Menerapkan dekorator make_bold ke suatu fungsi.
@add_html_tag("i") Menerapkan dekorator add_html_tag dengan tag "i" ke suatu fungsi.
print(say()) Mencetak hasil dari fungsi say, menampilkan output yang dihias.
def add_html_tag(tag) Mendefinisikan fungsi tingkat tinggi untuk membuat dekorator tag HTML yang dapat disesuaikan.
@add_html_tag("b") Menerapkan dekorator add_html_tag dengan tag "b" ke suatu fungsi.

Memahami Dekorator Fungsi Python

Skrip yang disediakan menunjukkan cara membuat dan merangkai dekorator fungsi dengan Python untuk mengubah perilaku fungsi. Dekorator dengan Python didefinisikan menggunakan def kata kunci untuk membuat fungsi yang menggunakan fungsi lain sebagai argumen dan mengembalikan fungsi baru. Itu make_bold dekorator membungkus hasil fungsi yang didekorasi dengan tag tebal HTML menggunakan format f-string: f"<b>{func()}</b>". Demikian pula, make_italic dekorator membungkus hasilnya dalam tag miring: f"<i>{func()}</i>". Saat dekorator ini diterapkan ke suatu fungsi menggunakan @decorator_name sintaksisnya, mereka memodifikasi keluaran fungsi dengan menambahkan tag HTML masing-masing.

Skrip kedua memperkenalkan pendekatan yang lebih serbaguna dengan membuat fungsi tingkat tinggi, add_html_tag, yang menghasilkan dekorator untuk setiap tag HTML tertentu. Fungsi ini mengambil tag HTML sebagai argumen dan mengembalikan dekorator yang menggabungkan keluaran fungsi dalam tag yang ditentukan: f"<{tag}>{func()}</{tag}>". Dengan menggunakan @add_html_tag("b") Dan @add_html_tag("i"), kita dapat merangkai dekorator ini untuk membungkus keluarannya say_hello berfungsi dalam tag tebal dan miring, menghasilkan "Halo". Contoh-contoh ini menggambarkan kekuatan dan fleksibilitas dekorator Python dalam meningkatkan dan menyesuaikan perilaku fungsi dengan cara yang bersih dan dapat digunakan kembali.

Menerapkan dan Merangkai Dekorator dengan Python

Skrip Python untuk Membuat dan Merangkai Dekorator

def make_bold(func):
    def wrapper():
        return f"<b>{func()}</b>"
    return wrapper

def make_italic(func):
    def wrapper():
        return f"<i>{func()}</i>"
    return wrapper

@make_bold
@make_italic
def say():
    return "Hello"

print(say())

Membuat Tag HTML Menggunakan Dekorator Python

Skrip Python untuk Modifikasi Fungsi dan Penandaan HTML

def add_html_tag(tag):
    def decorator(func):
        def wrapper():
            return f"<{tag}>{func()}</{tag}>"
        return wrapper
    return decorator

@add_html_tag("b")
@add_html_tag("i")
def say_hello():
    return "Hello"

print(say_hello())

Teknik Dekorator Python Tingkat Lanjut

Selain modifikasi fungsi sederhana, dekorator Python menawarkan cara yang ampuh untuk meningkatkan penggunaan kembali dan pemeliharaan kode. Salah satu kasus penggunaan tingkat lanjut adalah dekorator berparameter, yang memungkinkan dekorator menerima argumen. Teknik ini diilustrasikan dengan add_html_tag dekorator pada contoh sebelumnya. Dengan mendefinisikan dekorator yang menghasilkan dekorator lain, kita dapat membuat struktur kode yang sangat fleksibel dan dapat digunakan kembali. Dekorator berparameter memungkinkan kita meneruskan parameter ke dekorator itu sendiri, memungkinkan modifikasi perilaku fungsi yang dinamis dan spesifik konteks.

Aspek penting lainnya dari dekorator adalah kemampuannya untuk mempertahankan metadata fungsi. Ketika suatu fungsi dibungkus oleh dekorator, metadatanya, seperti nama dan docstringnya, bisa hilang. Untuk mempertahankan metadata ini, Python's functools.wraps digunakan di dalam dekorator. Dengan menerapkan @functools.wraps ke fungsi wrapper, metadata fungsi asli disalin, memastikan bahwa alat yang mengandalkan metadata ini, seperti generator dokumentasi, terus berfungsi dengan benar. Selain itu, dekorator dapat ditumpuk, seperti yang ditunjukkan pada @make_bold Dan @make_italic contohnya, untuk menerapkan beberapa lapisan modifikasi perilaku dengan cara yang bersih dan mudah dibaca.

Pertanyaan Umum Tentang Dekorator Python

  1. Apa itu dekorator dengan Python?
  2. Dekorator adalah fungsi yang mengubah perilaku fungsi lain, biasanya digunakan untuk menambahkan fungsionalitas dengan cara yang dapat digunakan kembali.
  3. Bagaimana Anda menerapkan dekorator ke suatu fungsi?
  4. Anda menerapkan dekorator menggunakan @decorator_name sintaks tepat di atas definisi fungsi.
  5. Bisakah Anda menerapkan banyak dekorator ke satu fungsi?
  6. Ya, beberapa dekorator dapat ditumpuk di atas suatu fungsi, masing-masing diterapkan sesuai urutannya.
  7. Apa itu dekorator berparameter?
  8. Dekorator berparameter adalah dekorator yang mengambil argumen, memungkinkan modifikasi yang lebih dinamis dan fleksibel.
  9. Bagaimana Anda mempertahankan metadata suatu fungsi saat menggunakan dekorator?
  10. Kau gunakan @functools.wraps di dalam dekorator untuk menyalin metadata fungsi asli ke fungsi wrapper.
  11. Mengapa dekorator berguna?
  12. Dekorator berguna untuk penggunaan kembali kode, keterbacaan, dan memisahkan masalah dengan merangkum fungsionalitas.
  13. Apa tujuan dari return wrapper pernyataan di dekorator?
  14. Itu return wrapper pernyataan mengembalikan fungsi dalam, secara efektif menerapkan modifikasi dekorator.
  15. Bisakah dekorator digunakan pada metode kelas?
  16. Ya, dekorator dapat digunakan pada metode kelas dan instance untuk mengubah perilakunya.
  17. Bagaimana Anda merangkai dekorator dengan Python?
  18. Untuk merangkai dekorator, susun beberapa @decorator_name pernyataan di atas definisi fungsi.
  19. Apa gunanya f-string di dekorator?
  20. F-string digunakan untuk memformat string di dekorator, memungkinkan penyisipan output fungsi secara dinamis ke dalam format tertentu, seperti tag HTML.

Meringkas Dekorator Fungsi dengan Python

Dekorator fungsi dengan Python menawarkan metode yang kuat untuk memodifikasi dan meningkatkan perilaku fungsi. Dengan memahami cara membuat, menerapkan, dan merangkai dekorator, Anda dapat meningkatkan modularitas dan keterbacaan kode secara signifikan. Panduan ini mencakup konsep-konsep penting seperti dekorator sederhana dan berparameter, yang mempertahankan metadata fungsi functools.wraps, dan aplikasi praktis dekorator untuk menambahkan tag HTML ke keluaran fungsi. Penguasaan teknik ini memungkinkan kode yang lebih dinamis dan mudah dipelihara, memfasilitasi praktik pemrograman yang lebih bersih dan efisien.