객체의 속성별 동등성 비교
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!