>  기사  >  백엔드 개발  >  Python에서 사용자 정의 클래스 객체의 동등성을 비교하는 방법은 무엇입니까?

Python에서 사용자 정의 클래스 객체의 동등성을 비교하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-03 08:10:29348검색

How to Compare Custom Class Objects for Equality in Python?

객체의 속성별 동등성 비교

Python에서 동등 연산자(==)를 사용하여 두 객체를 비교하면 항상 결과가 나오지는 않습니다. 이러한 객체가 사용자 정의 클래스의 인스턴스일 때 예상되는 결과입니다. 이 문제를 해결하려면 eq 메서드를 구현하여 사용자 정의 클래스에 대한 사용자 정의 동등 동작을 정의할 수 있습니다.

foo 및 bar 속성이 있는 MyClass 클래스를 고려해 보세요.

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

이 클래스의 두 인스턴스 x와 y는 동일한 속성 값을 갖습니다.

<code class="python">x = MyClass('foo', 'bar')
y = MyClass('foo', 'bar')</code>

그러나 동등 연산자를 사용하여 비교하면 False가 됩니다.

<code class="python">x == y</code>

Python을 만들려면 이러한 인스턴스가 동일하다고 생각하면 eq 메서드를 구현합니다.

<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):
            return NotImplemented
        return self.foo == other.foo and self.bar == other.bar</code>

이제 x와 y를 비교하면 True가 반환됩니다.

<code class="python">x == y</code>

구현에 유의하세요. eq는 자동으로 클래스의 인스턴스를 해시 불가능하게 만들어 세트와 사전에 저장하는 것을 방지합니다. 클래스가 불변 유형을 모델링하는 경우 hash 메소드도 구현해야 합니다.

<code class="python">class MyClass:
    def __hash__(self):
        return hash((self.foo, self.bar))</code>

dict를 반복하여 값을 비교하는 것은 일반적이지 않기 때문에 권장되지 않습니다. 비교할 수 없거나 해시할 수 없는 유형이 발생할 수 있습니다. Python 2 사용자는 eq 대신 cmp를 구현하고 불평등 동작을 위해 ne 구현을 고려해야 할 수도 있습니다.

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

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