Dalam Python, membandingkan contoh objek untuk kesamaan berdasarkan atributnya boleh menjadi tugas pengaturcaraan biasa. Walau bagaimanapun, pengendali kesamaan lalai (==) dalam Python menyemak identiti objek dan bukannya nilai atribut.
Pertimbangkan contoh berikut:
<code class="python">class MyClass: def __init__(self, foo, bar): self.foo = foo self.bar = bar x = MyClass('foo', 'bar') y = MyClass('foo', 'bar') print(x == y) # Output: False</code>
Walaupun x dan y mempunyai nilai atribut yang sama , semakan kesamaan mengembalikan False kerana ia adalah contoh objek yang berbeza. Untuk menangani isu ini dan mempertimbangkan nilai atribut untuk kesamaan, kita perlu 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 False # Don't compare with different types return self.foo == other.foo and self.bar == other.bar print(x == y) # Output: True</code>
Dengan mengatasi kaedah __eq__, kita boleh mentakrifkan tingkah laku kesamaan untuk kelas kita dan menyemak nilai atribut untuk perbandingan. Ini memastikan bahawa objek dengan nilai atribut yang sama dianggap sama, seperti yang dikehendaki.
Perhatikan bahawa melaksanakan __eq__ akan menjadikan objek anda tidak boleh dicincang, yang bermaksud mereka tidak boleh mengambil bahagian dalam set dan kamus sebagai kunci. Jika tingkah laku ini tidak diingini, pertimbangkan untuk melaksanakan __hash__ juga untuk menjadikan objek anda boleh dicincang, dengan syarat ia mewakili data tidak boleh diubah.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membandingkan Objek untuk Kesamaan Atribut dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!