Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mencapai Perbandingan Kesaksamaan Elegan dalam Kelas Python?

Bagaimana untuk Mencapai Perbandingan Kesaksamaan Elegan dalam Kelas Python?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-08 08:44:01426semak imbas

How to Achieve Elegant Equality Comparisons in Python Classes?

Cara Elegan untuk Menyokong Kesaksamaan ("Kesamaan") 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!

Kenyataan:
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