>  기사  >  백엔드 개발  >  Python 클래스에서 우아한 동등 비교를 달성하는 방법은 무엇입니까?

Python 클래스에서 우아한 동등 비교를 달성하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-08 08:44:01423검색

How to Achieve Elegant Equality Comparisons in Python Classes?

Python 클래스에서 동등성("동등성")을 지원하는 우아한 방법

객체 지향 프로그래밍에서는 사용자 정의 클래스의 객체 간에 동등성 검사를 정의하는 것이 중요한 경우가 많습니다. Python에서는 동등성과 불평등 비교를 위해 각각 eq 및 __ne__라는 특수 메소드 구현을 통해 이를 가능하게 합니다.

한 가지 확립된 접근 방식은 dict 속성을 ​​비교하는 것입니다. 두 개의 개체:

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

그러나 다음을 더 간단하게 고려하세요. 방법:

class Number:

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

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

이 간결한 방법은 복잡한 dict 비교가 필요하지 않으므로 우아한 대안이 됩니다.

또한 서브클래싱을 원활하게 처리하여 교환 및 교환을 보장합니다. 일관된 동등성 검사:

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

솔루션을 완성하려면 일관된 해싱 및 고유 식별을 위한 hash 방법:

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)

이는 동등 비교를 위해 dict를 사용할 때 발생하는 해싱 문제를 해결하여 신뢰할 수 있는 집합 동작과 고유 식별을 보장합니다. 별개의 개체입니다.

위 내용은 Python 클래스에서 우아한 동등 비교를 달성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.