Python에서 사용자 정의 개체 동일성을 정의하는 방법: `__eq__`를 구현해야 합니까?

Mary-Kate Olsen
풀어 주다: 2024-11-03 09:39:02
원래의
835명이 탐색했습니다.

How to Define Custom Object Equality in Python: Should You Implement `__eq__`?

속성 비교를 통한 객체 동등성 향상

Python에서 두 객체의 동등성 비교(== 연산자 사용)는 일반적으로 기본적으로 비교를 사용합니다. 객체 참조. 그러나 동일한 클래스의 객체가 동일한 속성을 갖지만 별개의 객체 참조를 갖는 경우 이는 바람직하지 않을 수 있습니다.

객체 동등성 사용자 정의

객체 동등성 동작을 수정하려면, 클래스 정의 내에서 eq 메소드를 구현할 수 있습니다. 사용자 정의 eq 메소드를 정의함으로써 해당 클래스의 인스턴스 간의 동등성을 결정하기 위한 정확한 기준을 지정합니다.

MyClass 구현

제공된 예에는 멤버 변수 foo 및 bar가 있는 MyClass 클래스가 있습니다. 다음과 같이 eq 메소드를 구현할 수 있습니다.

class MyClass:
    def __init__(self, foo, bar):
        self.foo = foo
        self.bar = bar

    def __eq__(self, other):
        if not isinstance(other, MyClass):
            return NotImplemented
        
        return self.foo == other.foo and self.bar == other.bar
로그인 후 복사

이 구현을 통해 두 객체가 모두 MyClass의 인스턴스인지 확인한 다음 foo 및 bar 값을 비교합니다. 이러한 속성이 일치하면 객체는 동일한 것으로 간주되며 eq 메서드는 True를 반환합니다.

의미 및 고려 사항

eq 구현 클래스의 인스턴스를 해시 불가능하게 만듭니다. 즉, 세트나 사전에 저장할 수 없습니다. 클래스가 변경 가능한 유형을 나타내는 경우 인스턴스를 해시할 수 없는 상태로 두는 것이 좋습니다.

불변 데이터 모델의 경우 인스턴스가 올바르게 작동할 수 있도록 hash 메서드도 구현하는 것이 좋습니다.

결론

eq 메서드를 사용자 정의하여 특정 클래스의 개체가 동일한지 비교하는 방법을 제어할 수 있습니다. . 이를 통해 객체의 관련 속성을 기반으로 동등성을 정의하여 객체 참조에 관계없이 속성이 일치할 때 동등하다고 간주되도록 할 수 있습니다.

위 내용은 Python에서 사용자 정의 개체 동일성을 정의하는 방법: `__eq__`를 구현해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿