Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana Saya Boleh Memastikan Kelas Python Saya Benar-Benar Sama: Panduan Kaedah Kesetaraan

Bagaimana Saya Boleh Memastikan Kelas Python Saya Benar-Benar Sama: Panduan Kaedah Kesetaraan

DDD
DDDasal
2024-11-08 10:51:01957semak imbas

How Can I Ensure My Python Classes Are Truly Equal: A Guide to Equivalence Methods

Memastikan Kelas Python Anda Sama: Panduan Komprehensif untuk Kaedah Kesetaraan

Dalam Python, eq dan ne kaedah khas menyediakan cara yang mudah untuk menentukan kesetaraan untuk kelas tersuai. Walaupun pendekatan asas untuk membandingkan __dict__s ialah pilihan yang berdaya maju, ia mungkin menghadapi cabaran dengan subkelas dan saling kendali dengan jenis lain.

Pengendalian Kesetaraan yang Lebih Teguh

Untuk menangani perkara ini pengehadan, pertimbangkan pelaksanaan yang lebih komprehensif:

class Number:

    def __init__(self, number):
        self.number = number

    def __eq__(self, other):
        if isinstance(other, Number):
            return self.number == other.number
        return NotImplemented

    def __ne__(self, other):
        x = self.__eq__(other)
        if x is not NotImplemented:
            return not x
        return NotImplemented

    def __hash__(self):
        return hash(tuple(sorted(self.__dict__.items())))

class SubNumber(Number):
    pass

Versi ini termasuk:

  • Pengendalian Subkelas: Ia memastikan kesetaraan disemak dengan betul antara kelas Nombor dan subkelasnya.
  • Pembetulan Bukan Komutatif: Ia memastikan bahawa perbandingan kesamaan adalah komutatif, tanpa mengira operan pesanan.
  • Timpa Cincang: Dengan mentakrifkan kaedah cincang tersuai, ia memastikan objek dengan nilai yang sama mempunyai nilai cincang yang sama, yang penting untuk ditetapkan dan operasi kamus.

Pengesahan dan Menguji

Untuk mengesahkan keteguhan pendekatan ini, berikut ialah satu set penegasan:

n1 = Number(1)
n2 = Number(1)
n3 = SubNumber(1)
n4 = SubNumber(4)

assert n1 == n2
assert n2 == n1
assert not n1 != n2
assert not n2 != n1

assert n1 == n3
assert n3 == n1
assert not n1 != n3
assert not n3 != n1

assert not n1 == n4
assert not n4 == n1
assert n1 != n4
assert n4 != n1

assert len(set([n1, n2, n3])) == 1
assert len(set([n1, n2, n3, n4])) == 2

Pernyataan ini menunjukkan kelakuan yang betul bagi kaedah kesetaraan dan ketekalan nilai cincang.

Dengan menerima pendekatan yang lebih komprehensif ini, anda boleh mencipta kelas Python dengan kesetaraan yang mantap pengendalian, memastikan perbandingan yang boleh dipercayai dan operasi set dan kamus yang tepat.

Atas ialah kandungan terperinci Bagaimana Saya Boleh Memastikan Kelas Python Saya Benar-Benar Sama: Panduan Kaedah Kesetaraan. 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