Python에서 사용자 정의 클래스는 eq 및 특수 메서드 구현을 통해 동등성을 갖출 수 있습니다. == 및 != 연산자는 각각 ne입니다. 이를 통해 해당 클래스의 객체를 해당 속성에 따라 비교할 수 있습니다.
동등성을 달성하는 간단하면서도 효과적인 방법은 객체의 속성이 포함된 사전을 비교하는 것입니다. :
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 def __ne__(self, other): return not self.__eq__(other)
이 방법은 개체 간의 동등성을 설정하는 반면 같은 클래스라도 관련 없는 유형의 하위 클래스나 인스턴스를 처리할 때 문제에 직면합니다. 이러한 문제를 해결하려면 다음 고려 사항이 중요합니다.
클래식 스타일 클래스의 비가환성:
클래식 스타일 Python 2 클래스는 eq를 실행합니다. 첫 번째 피연산자의 메서드이고 두 번째 피연산자는 ne 입니다. 대칭을 보장하려면 지원되지 않는 피연산자 유형에 대해 NotImplemented를 반환하는 것을 고려하세요.
지원되지 않는 유형에 대해 NotImplemented 반환:
피연산자가 다른 유형인 경우(아니요 상속), eq에서 NotImplemented를 반환하고 ne은 비교를 다른 피연산자의 반영된 메서드에 위임합니다. 이를 통해 교환성이 보장되고 집합을 사용하여 고유한 인스턴스를 결정할 수 있습니다.
해싱 및 집합 처리:
기본적으로 객체는 객체 식별자를 사용하여 해시됩니다. 집합 내에서 적절한 비교를 보장하려면 해시를 재정의하여 객체의 속성을 기반으로 일관된 해시를 계산하세요.
이러한 고려 사항을 통합하면 더 강력한 결과를 얻을 수 있습니다. 객체 동등성을 위한 구현:
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())))
이 구현은 전체에서 올바른 동등성과 해싱을 보장합니다. 하위 클래스 및 관련 없는 인스턴스를 사용하여 Python 클래스의 동등성을 지원하는 보다 우아하고 포괄적인 수단을 제공합니다.
위 내용은 Python 클래스에서 동등성을 달성하는 방법: __eq__, __ne__ 및 해싱에 대한 심층 분석?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!