Penghias ialah alat berkuasa dalam Python untuk melanjutkan tingkah laku fungsi sedia ada. Walau bagaimanapun, apabila digunakan pada fungsi, fungsi dihiasi yang terhasil sering kehilangan dokumentasi dan tandatangan asalnya. Ini boleh menjadi masalah, terutamanya apabila menggunakan penghias generik yang melakukan tugas biasa seperti pengelogan atau penukaran hujah.
Penyelesaian Biasa
Beberapa penyelesaian biasa termasuk:
Menggunakan Modul penghias
Penyelesaian yang lebih mantap ialah menggunakan modul penghias, yang menyediakan fungsi penghias yang dipanggil @decorator.decorator. Dengan menggunakan penghias ini pada fungsi penghias anda sendiri, anda boleh mengekalkan tandatangan fungsi asal.
<code class="python">import decorator @decorator.decorator def args_as_ints(f, *args, **kwargs): args = [int(x) for x in args] kwargs = dict((k, int(v)) for k, v in kwargs.items()) return f(*args, **kwargs) @args_as_ints def funny_function(x, y, z=3): """Computes x*y + 2*z""" return x*y + 2*z print(funny_function("3", 4.0, z="5")) # 22 help(funny_function) # Help on function funny_function in module __main__: # # funny_function(x, y, z=3) # Computes x*y + 2*z</code>
Python 3.4
Dalam Python 3.4 dan lebih baharu, Fungsi functools.wraps() boleh digunakan untuk mengekalkan tandatangan.
<code class="python">import functools def args_as_ints(func): @functools.wraps(func) def wrapper(*args, **kwargs): args = [int(x) for x in args] kwargs = dict((k, int(v)) for k, v in kwargs.items()) return func(*args, **kwargs) return wrapper @args_as_ints def funny_function(x, y, z=3): """Computes x*y + 2*z""" return x*y + 2*z print(funny_function("3", 4.0, z="5")) # 22 help(funny_function) # Help on function funny_function in module __main__: # # funny_function(x, y, z=3) # Computes x*y + 2*z</code>
Atas ialah kandungan terperinci Bagaimana untuk Mengekalkan Tandatangan Fungsi Berhias dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!