Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Anda Boleh Menyesuaikan Perbandingan Kesaksamaan untuk Objek Python?

Bagaimanakah Anda Boleh Menyesuaikan Perbandingan Kesaksamaan untuk Objek Python?

DDD
DDDasal
2024-11-03 09:16:29213semak imbas

How Can You Customize Equality Comparison for Python Objects?

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!

Kenyataan:
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