Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Mencapai Perbandingan Kesaksamaan Elegan dalam Kelas Python?
Dalam pengaturcaraan berorientasikan objek, selalunya penting untuk menentukan semakan kesaksamaan antara objek kelas tersuai. Python membolehkannya melalui pelaksanaan kaedah khas, eq dan __ne__, masing-masing untuk perbandingan kesetaraan dan ketaksamaan.
Satu pendekatan yang telah ditetapkan ialah membandingkan atribut dikt bagi dua objek:
class Foo: def __init__(self, item): self.item = item def __eq__(self, other): if isinstance(other, self.__class__): return self.__dict__ == other.__dict__ else: return False
Walau bagaimanapun, pertimbangkan yang berikut lebih mudah kaedah:
class Number: def __init__(self, number): self.number = number def __eq__(self, other): return isinstance(other, Number) and self.number == other.number
Kaedah ringkas ini menghapuskan keperluan untuk perbandingan dikt yang kompleks, menjadikannya alternatif yang elegan.
Selain itu, ia mengendalikan subkelas dengan lancar, memastikan komutatif dan semakan kesaksamaan yang konsisten:
class SubNumber(Number): pass n1 = Number(1) n2 = Number(1) n3 = SubNumber(1) n4 = SubNumber(4) print(n1 == n2) # True print(n2 == n1) # True print(n1 == n3) # True print(n1 != n4) # True print(len(set([n1, n2, n3]))) # 1
Untuk melengkapkan penyelesaian, ia penting untuk mengatasi kaedah cincang untuk pencincangan yang konsisten dan pengenalan unik:
class Number: def __init__(self, number): self.number = number def __eq__(self, other): return isinstance(other, Number) and self.number == other.number def __hash__(self): return hash(self.number)
Ini menangani isu pencincangan yang dihadapi apabila menggunakan dikt untuk perbandingan kesaksamaan, memastikan tingkah laku set yang boleh dipercayai dan pengenalan unik objek yang berbeza.
Atas ialah kandungan terperinci Bagaimana untuk Mencapai Perbandingan Kesaksamaan Elegan dalam Kelas Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!