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!