Perbandingan Kesaksamaan Tersuai dalam Objek Python
Gelagat lalai Python menganggap kejadian objek sebagai entiti yang berbeza, walaupun apabila mereka berkongsi atribut yang sama. Tingkah laku ini boleh menjadi masalah apabila anda ingin membandingkan objek berdasarkan sifat dalaman mereka dan bukannya identiti objeknya. Begini cara untuk menyesuaikan perbandingan kesamaan untuk contoh objek:
Mentakrifkan Kaedah eq
Untuk mengawal cara objek kelas tersuai anda dibandingkan untuk kesamaan , takrifkan kaedah eq dalam definisi kelas. Kaedah ini mengambil dua hujah: diri dan lain-lain. Parameter diri merujuk kepada objek semasa, manakala yang lain mewakili objek yang dibandingkan.
<code class="python">class MyClass: def __init__(self, foo, bar): self.foo = foo self.bar = bar def __eq__(self, other): if not isinstance(other, MyClass): # Don't compare to unrelated types return NotImplemented return self.foo == other.foo and self.bar == other.bar</code>
Dengan melaksanakan __eq__, anda pada asasnya mentakrifkan semakan kesaksamaan tersuai untuk contoh kelas anda. Dalam contoh ini, kaedah membandingkan atribut foo dan bar bagi diri dan orang lain, dan mengembalikan Benar jika kedua-duanya sama.
Akibat Pelaksanaan eq
Melaksanakan eq menjadikan kejadian kelas anda tidak boleh dicincang. Ini bermakna ia tidak boleh digunakan sebagai kunci dalam kamus atau sebagai elemen dalam set. Ini kerana Python bergantung pada fungsi hash() untuk menentukan sama ada objek boleh dicincang dan nilai cincang untuk objek diperoleh daripada kandungan dalamannya. Memandangkan kandungan objek anda boleh berubah disebabkan penetapan atribut, ia tidak boleh dicincang dengan pasti.
Jika anda memodelkan jenis tidak boleh ubah, anda juga harus melaksanakan kaedah cincang untuk memastikan konsisten dan tingkah laku yang boleh diramal apabila digunakan dalam koleksi.
Elakkan Penyelesaian Umum
Percubaan untuk menentukan kaedah perbandingan kesaksamaan umum dengan mengulang melalui dikt dan membandingkan nilai tidak disyorkan. Pendekatan ini boleh gagal untuk membandingkan objek dengan betul jika ia mengandungi jenis yang tidak dapat dibandingkan atau tidak boleh dicincang dalam kamus mereka.
Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Menyesuaikan Perbandingan Kesaksamaan untuk Objek Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!