Bagaimanakah Fungsi, Kaedah Tidak Terikat dan Kaedah Terikat Berbeza dalam Sistem Penyelesaian Kaedah Python?

Patricia Arquette
Lepaskan: 2024-10-27 00:49:02
asal
950 orang telah melayarinya

How do Functions, Unbound Methods, and Bound Methods Differ in Python's Method Resolution System?

Menyingkap Sifat Fungsi, Kaedah Tidak Terikat dan Kaedah Terikat

Konsep kelas dan kaedah adalah asas kepada paradigma pengaturcaraan berorientasikan objek . Memahami nuansa dan hubungan antara fungsi, kaedah tidak terikat dan kaedah terikat adalah penting untuk menguasai selok-belok sistem penyelesaian kaedah Python.

Mentakrifkan Entiti

  • Fungsi: Dicipta menggunakan pernyataan def, fungsi ialah unit kod kendiri tanpa kaitan langsung dengan mana-mana kelas.
  • Kaedah Tidak Terikat: Apabila fungsi menjadi sebahagian daripada kelas definisi, ia berubah menjadi kaedah tidak terikat. Peralihan ini berlaku secara automatik dalam Python 2 tetapi sudah lapuk dalam Python 3.
  • Kaedah Terikat: Dicipta dengan mengakses kaedah pada contoh kelas, kaedah terikat secara tersirat menerima contoh sebagai parameter pertamanya ( diri sendiri).

Transformasi dan Kebolehcapaian

  • Fungsi ke Kaedah Tidak Terikat: Menggunakan jenis.MethodType atau mengakses fungsi dalam badan kelas secara berkesan menukarnya kepada kaedah tidak terikat.
  • Kaedah Tidak terikat kepada Kaedah Terikat: Mengakses kaedah tidak terikat pada contoh kelas menghasilkan penciptaan kaedah terikat.
  • Fungsi kepada Kaedah Terikat: Analogi dengan langkah sebelumnya, mengakses fungsi pada contoh kelas secara langsung menjana kaedah terikat.

Perbezaan Utama

  • Kesedaran Kelas: Kaedah tidak terikat membawa pengetahuan tentang kelas yang dimilikinya, manakala fungsi dan kaedah terikat tidak mempunyai kesedaran ini.
  • Akses Segera: Tidak seperti kaedah tidak terikat, yang memerlukan contoh untuk dilaksanakan, fungsi dan kaedah terikat boleh dipanggil terus.

Kesamaan dan Penggunaan

Dalam kedua-dua Python 2 dan Python 3, ungkapan berikut adalah setara dari segi fungsi:

<code class="python">f1(C())
C.f1(C())
C().f1()</code>
Salin selepas log masuk

Mengikat fungsi pada tika menghasilkan versi yang diubah suai di mana parameter pertama secara semula jadi ditetapkan kepada tika yang diberikan. Pada asasnya, kaedah terikat ini berkelakuan sama dengan bentuk alternatif berikut:

<code class="python">lambda *args, **kwargs: f1(C(), *args, **kwargs)
functools.partial(f1, C())</code>
Salin selepas log masuk

Dari Tidak Terikat ke Terikat

Instance Python 2 bagi kelas tidak mempunyai atribut langsung yang sepadan kepada kaedah tidak terikat, yang sebaliknya boleh diperoleh semula melalui atribut __dict__ kelas itu sendiri. Walau bagaimanapun, mengakses kaedah tidak terikat pada kejadian menyebabkan penukaran automatiknya kepada kaedah terikat.

Kesimpulan

Memahami perbezaan antara fungsi, kaedah tidak terikat dan kaedah terikat memberi anda kuasa untuk menggunakan mekanisme penyelesaian kaedah Python dengan berkesan. Memahami mekanisme pengikatan dan transformasi memperkasakan anda untuk menavigasi kerumitan pengekodan berorientasikan objek dengan mudah.

Atas ialah kandungan terperinci Bagaimanakah Fungsi, Kaedah Tidak Terikat dan Kaedah Terikat Berbeza dalam Sistem Penyelesaian Kaedah 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
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!