Meningkatkan Kesamaan Objek melalui Perbandingan Atribut
Dalam Python, membandingkan dua objek untuk kesamaan (menggunakan operator ==) biasanya lalai kepada perbandingan rujukan objek mereka. Walau bagaimanapun, ini mungkin tidak diingini apabila objek dari kelas yang sama mempunyai atribut yang sama tetapi rujukan objek yang berbeza.
Menyesuaikan Kesamaan Objek
Untuk mengubah suai gelagat kesamaan objek, kita boleh melaksanakan kaedah eq dalam definisi kelas. Dengan mentakrifkan kaedah eq tersuai, kami menentukan kriteria tepat untuk menentukan kesaksamaan antara kejadian kelas tersebut.
Pelaksanaan untuk MyClass
Dalam contohnya, kami mempunyai kelas MyClass dengan pembolehubah ahli foo dan bar. Kami boleh melaksanakan kaedah eq seperti berikut:
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
Dengan pelaksanaan ini, kami sedang menyemak bahawa kedua-dua objek adalah contoh MyClass dan kemudian membandingkan nilai foo dan barnya. Jika atribut ini sepadan, objek dianggap sama dan kaedah eq mengembalikan True.
Implikasi dan Pertimbangan
Melaksanakan eq menjadikan tika kelas anda tidak boleh dicincang, bermakna mereka tidak boleh disimpan dalam set atau kamus. Jika kelas anda mewakili jenis boleh ubah, anda mungkin ingin mempertimbangkan untuk membiarkan kejadian anda tidak boleh dicincang.
Untuk model data tidak berubah, adalah disyorkan untuk turut melaksanakan kaedah cincang untuk membolehkan kejadian berfungsi dengan betul dalam kamus dan set.
Kesimpulan
Dengan menyesuaikan kaedah eq, kami mendapat kawalan ke atas cara objek kelas tertentu dibandingkan untuk kesamarataan . Ini membolehkan kami mentakrifkan kesaksamaan berdasarkan atribut berkaitan objek kami, memastikan ia dianggap sama apabila atributnya sepadan, tanpa mengira rujukan objeknya.
Atas ialah kandungan terperinci Bagaimana untuk Mentakrifkan Kesamaan Objek Tersuai dalam Python: Sekiranya Anda Melaksanakan `__eq__`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!