Bagaimana Membandingkan Objek Kelas Tersuai untuk Kesamaan dalam Python?

Susan Sarandon
Lepaskan: 2024-11-03 08:10:29
asal
304 orang telah melayarinya

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>
Salin selepas log masuk

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

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

Walau bagaimanapun, membandingkannya menggunakan operator kesamaan menghasilkan False:

<code class="python">x == y</code>
Salin selepas log masuk
Salin selepas log masuk

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>
Salin selepas log masuk

Sekarang, membandingkan x dan y mengembalikan Benar:

<code class="python">x == y</code>
Salin selepas log masuk
Salin selepas log masuk

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>
Salin selepas log masuk

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!

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!