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 중국어 웹사이트의 기타 관련 기사를 참조하세요!