Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana Membandingkan Objek Kelas Tersuai untuk Kesamaan dalam Python?

Bagaimana Membandingkan Objek Kelas Tersuai untuk Kesamaan dalam Python?

Susan Sarandon
Susan Sarandonasal
2024-11-03 08:10:29397semak imbas

How to Compare Custom Class Objects for Equality in Python?

Membandingkan Objek untuk Kesamaan dengan Atributnya

Dalam Python, membandingkan dua objek menggunakan operator kesamaan (==) tidak selalu menghasilkan hasil yang dijangkakan apabila objek ini adalah contoh kelas tersuai. Untuk menangani isu ini, kami boleh melaksanakan kaedah eq untuk mentakrifkan gelagat kesaksamaan tersuai untuk kelas tersuai kami.

Pertimbangkan kelas MyClass dengan atribut foo dan bar:

<code class="python">class MyClass:
    def __init__(self, foo, bar):
        self.foo = foo
        self.bar = bar</code>

Dua kejadian kelas ini, x dan y, mempunyai nilai atribut yang sama:

<code class="python">x = MyClass('foo', 'bar')
y = MyClass('foo', 'bar')</code>

Walau bagaimanapun, membandingkannya menggunakan operator kesamaan menghasilkan False:

<code class="python">x == y</code>

Untuk membuat Python anggap keadaan ini sama, kami melaksanakan kaedah eq:

<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):
            return NotImplemented
        return self.foo == other.foo and self.bar == other.bar</code>

Sekarang, membandingkan x dan y mengembalikan Benar:

<code class="python">x == y</code>

Perhatikan bahawa melaksanakan eq secara automatik menjadikan kejadian kelas kami tidak boleh dicincang, menghalang storannya dalam set dan dicts. Jika kelas kami memodelkan jenis yang tidak boleh diubah, kami juga harus melaksanakan kaedah cincang:

<code class="python">class MyClass:
    def __hash__(self):
        return hash((self.foo, self.bar))</code>

Melongok melalui dikt untuk membandingkan nilai adalah tidak digalakkan kerana ia tidak benar-benar umum dan boleh menemui jenis yang tidak dapat dibandingkan atau tidak boleh dicincang. Pengguna Python 2 mungkin perlu melaksanakan cmp dan bukannya eq dan pertimbangkan untuk melaksanakan ne untuk tingkah laku ketidaksamaan.

Atas ialah kandungan terperinci Bagaimana Membandingkan Objek Kelas Tersuai untuk Kesamaan dalam 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