Bagaimana untuk Mengikat Kaedah Tidak Terikat kepada Contoh dalam Python?

DDD
Lepaskan: 2024-11-03 23:05:31
asal
864 orang telah melayarinya

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)
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!