Mengapa Kaedah Tidak Menunjukkan Kesamaan Rujukan?
Dalam Python, sementara fungsi mengekalkan kesamaan rujukan, kaedah tidak. Perbezaan ini berpunca daripada cara kaedah dicipta.
Penciptaan Kaedah
Berbeza dengan fungsi, objek kaedah dibuat seketika setiap kali ia diakses. Ini kerana kaedah pada asasnya adalah deskriptor, yang mengembalikan objek kaedah apabila kaedah .__get__ mereka digunakan.
What.__dict__['meth'] # Function (not method) object What.__dict__['meth'].__get__(What(), What) # Method object
Pengujian Kesamaan Kaedah
Dalam Python 3.8 dan lebih baru , kesamaan kaedah ditentukan dengan membandingkan atribut .__self__ dan .__func__. Jika mereka merujuk kepada fungsi dan contoh yang sama, kaedah tersebut dianggap sama. Walau bagaimanapun, sebelum 3.8, tingkah laku kesamaan kaedah tidak konsisten bergantung pada pelaksanaan kaedah.
Implikasi
Kebolehubahan dalam kesamaan kaedah ini mempengaruhi beberapa senario:
Penyelesaian untuk Menguji Identiti Fungsi
Untuk menguji sama ada kaedah mewakili fungsi asas yang sama, anda boleh membandingkan atribut .__func__ mereka:
What().meth.__func__ == What().meth.__func__
Atas ialah kandungan terperinci Mengapa Kaedah Tidak Mempamerkan Kesamaan Rujukan dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!