>백엔드 개발 >파이썬 튜토리얼 >Python 객체에 대한 동등 비교를 어떻게 사용자 정의할 수 있습니까?

Python 객체에 대한 동등 비교를 어떻게 사용자 정의할 수 있습니까?

DDD
DDD원래의
2024-11-03 09:16:29283검색

How Can You Customize Equality Comparison for Python Objects?

Python 객체의 사용자 정의 동등성 비교

Python의 기본 동작은 객체 인스턴스가 동일한 속성을 공유하는 경우에도 객체 인스턴스를 별개의 엔터티로 처리합니다. 이 동작은 개체 ID가 아닌 내부 속성을 기준으로 개체를 비교하려는 경우 문제가 될 수 있습니다. 객체 인스턴스에 대한 동등 비교를 사용자 정의하는 방법은 다음과 같습니다.

eq 메서드 정의

사용자 정의 클래스의 객체가 동일한지 비교하는 방법을 제어하려면 , 클래스 정의 내에 eq 메서드를 정의하세요. 이 메서드는 self와 other라는 두 가지 인수를 사용합니다. self 매개변수는 현재 개체를 참조하고 other는 비교 대상 개체를 나타냅니다.

<code class="python">class MyClass:
    def __init__(self, foo, bar):
        self.foo = foo
        self.bar = bar

    def __eq__(self, other): 
        if not isinstance(other, MyClass):
            # Don't compare to unrelated types
            return NotImplemented

        return self.foo == other.foo and self.bar == other.bar</code>

__eq__를 구현하면 기본적으로 클래스 인스턴스에 대한 사용자 정의 동등성 검사를 정의하게 됩니다. 이 예에서 메소드는 self와 other의 foo 및 bar 속성을 비교하고 둘 다 같으면 True를 반환합니다.

eq

eq를 구현하면 클래스 인스턴스를 해시할 수 없게 됩니다. 즉, 사전의 키나 세트의 요소로 사용할 수 없습니다. 이는 Python이 객체가 해시 가능한지 여부를 결정하기 위해 hash() 함수에 의존하고 객체의 해시 값이 내부 내용에서 파생되기 때문입니다. 속성 할당으로 인해 객체의 콘텐츠가 변경될 수 있으므로 안정적으로 해시할 수 없습니다.

불변 유형을 모델링하는 경우 일관성을 보장하기 위해

hash 메서드도 구현해야 합니다. 컬렉션에 사용될 때 예측 가능한 동작.

일반은 피하세요. 솔루션

dict를 반복하고 값을 비교하여 일반적인 동등 비교 방법을 정의하려는 시도는 권장되지 않습니다. 이 접근 방식은 사전에 비교할 수 없거나 해시할 수 없는 유형이 포함된 경우 개체를 올바르게 비교하지 못할 수 있습니다.

위 내용은 Python 객체에 대한 동등 비교를 어떻게 사용자 정의할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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