Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mengikat Kaedah Tidak Terikat kepada Contoh dalam Python?

Bagaimana untuk Mengikat Kaedah Tidak Terikat kepada Contoh dalam Python?

DDD
DDDasal
2024-11-03 23:05:31938semak imbas

How to Bind Unbound Methods to Instances in Python?

Mengikat Kaedah Tidak Terikat dalam Python

Mengikat kaedah tidak terikat kepada kejadian ialah tugas biasa dalam pengaturcaraan Python, terutamanya apabila bekerja dengan rangka kerja seperti wxPython. Walau bagaimanapun, hanya memanggil kaedah bind() pada kaedah tidak terikat mengakibatkan ralat.

Masalahnya

Apabila mengikat kaedah tidak terikat, program gagal kerana kaedah tidak terikat memerlukan contoh untuk digunakan. Mengikatnya secara langsung tanpa memanggilnya menjana ralat.

Penyelesaian

Nasib baik, terdapat dua penyelesaian untuk masalah ini.

Menggunakan Deskriptor

Fungsi dalam Python juga merupakan deskriptor, yang bermaksud ia mempunyai kaedah get. Kaedah ini membenarkan mengikat kaedah tidak terikat kepada kejadian. Untuk mengikat kaedah tidak terikat menggunakan deskriptor:

bound_handler = handler.__get__(self, MyWidget)

Menggunakan Fungsi Ikatan Tersuai

Sebagai alternatif, anda boleh menggunakan fungsi mengikat tersuai seperti bind() daripada contoh di bawah:

def bind(instance, func, as_name=None):
    bound_method = func.__get__(instance, instance.__class__)
    setattr(instance, as_name, bound_method)
    return bound_method

Fungsi ini membolehkan anda mengikat kaedah tidak terikat dengan nama tersuai.

Kesimpulan

Dengan menggunakan sama ada pendekatan deskriptor atau fungsi mengikat tersuai, anda boleh mengikat kaedah tidak terikat tanpa menggunakan kaedah tersebut, membolehkan struktur kod yang bersih dan boleh diselenggara.

Atas ialah kandungan terperinci Bagaimana untuk Mengikat Kaedah Tidak Terikat kepada Contoh dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn