Bagaimana untuk Mengikat Kaedah Tidak Terikat dalam Python Tanpa Menggunakannya?

Barbara Streisand
Lepaskan: 2024-10-30 01:22:03
asal
565 orang telah melayarinya

How to Bind Unbound Methods in Python Without Invoking Them?

Menyahikat Simpul Gordian: Mengikat Kaedah Tidak Terikat Dengan Lancar

Dalam Python, mengikat kaedah tidak terikat tanpa menggunakan kaedah tersebut boleh memberikan cabaran pengekodan. Pertimbangkan senario ini:

<code class="python">class MyWidget(wx.Window):
    buttons = [("OK", OnOK), ("Cancel", OnCancel)]

    def setup(self):
        for text, handler in MyWidget.buttons:
            b = wx.Button(parent, label=text).bind(wx.EVT_BUTTON, handler)</code>
Salin selepas log masuk

Di sini, pengendali mewakili kaedah tidak terikat, yang membawa kepada ralat masa jalan. Walaupun functools.partial menawarkan penyelesaian, keupayaan deskriptor semula jadi Python menyediakan penyelesaian yang elegan.

Menyingkap Kuasa Deskriptor

Semua fungsi dalam Python mempunyai sifat deskriptor intrinsik. Dengan memanfaatkan kaedah __get__ mereka, kaedah tidak terikat boleh terikat kepada contoh:

<code class="python">bound_handler = handler.__get__(self, MyWidget)</code>
Salin selepas log masuk

Teknik ini membolehkan pengikatan kaedah tidak terikat tanpa mencetuskan pelaksanaannya.

Contoh Komprehensif

Untuk menggambarkan, mari kita laksanakan fungsi ikatan tersuai:

<code class="python">def bind(instance, func, as_name=None):
    if as_name is None:
        as_name = func.__name__
    bound_method = func.__get__(instance, instance.__class__)
    setattr(instance, as_name, bound_method)
    return bound_method</code>
Salin selepas log masuk

Menggunakan fungsi ikatan ini, kita boleh mencapai kefungsian yang diingini:

<code class="python">class Thing:
    def __init__(self, val):
        self.val = val

something = Thing(21)

def double(self):
    return 2 * self.val

bind(something, double)
something.double()  # returns 42</code>
Salin selepas log masuk

Dengan memeluk kuasa deskriptor, kami dengan mudah mengikat kaedah tidak terikat, membuka kunci pelbagai kemungkinan pengekodan tanpa menjejaskan prinsip Pythonic.

Atas ialah kandungan terperinci Bagaimana untuk Mengikat Kaedah Tidak Terikat dalam Python Tanpa Menggunakannya?. 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
Artikel terbaru oleh pengarang
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!