Gunakan __panggilan__ kelas untuk melaksanakan penghias, seperti yang ditunjukkan dalam kod berikut
class Check(object):
def __init__(self, name):
self.name = name
def __call__(self, func):
print "1111111111"
def _decorator(*args, **kwargs):
print "2222222222"
return func(*args, **kwargs)
Jika anda menggunakan kelas ini sebagai penghias untuk menghias sesuatu majlis.
@Check("param")
def param_check(request):
"python code....."
return Response("ok")
Inilah masalahnya. Mulakan django atau sebarang proses python lain. Apabila melaksanakan laluan param_check ini, cetak "1111111111" hanya dicetak buat kali pertama dan 1111111111111 tidak dicetak apabila dipanggil kemudian.
Dan cetak "2222222222" dicetak setiap kali. Pemahaman saya ialah __call__ mentakrifkan penghias ini untuk kali pertama, jadi ia hanya dilaksanakan sekali sahaja apabila diminta semula kemudian, dan hanya bahagian badan fungsi yang dilaksanakan, iaitu bahagian cetakan 222222222. Siapa tahu ciri-ciri penghias ular sawa ini
Sebenarnya, ada sesuatu yang perlu diperhatikan apabila menggunakan penghias kelas dengan parameter dan tanpa parameter sebenarnya berbeza
Penghias kelas tanpa parameter
Jika anda mencipta penghias tanpa parameter, kaedah yang dihias akan dihantar kepada pembina penghias (__init__), dan kemudian apabila fungsi yang dihias dipanggil, kaedah __call__() penghias akan dilaksanakan.
Perlu diambil perhatian bahawa semasa fasa hiasan, fungsi __init__ dilaksanakan, dan apabila kaedah berhias dipanggil, __call__ dilaksanakan.
Penghias kelas dengan parameter
Keluaran:
Dapat dilihat dengan jelas bahawa __call__ hanya akan dipanggil sekali semasa fasa hiasan
Jika anda ingin mengetahui butiran lanjut, sila lihat di sini: http://www.artima.com/weblogs...