본문 바로가기
파이썬

파이썬 객체 인스턴스의 속성이 같은지 비교

by º기록 2021. 2. 9.
반응형

두 개의 멤버 변수 foo bar 를 포함하는 MyClass 클래스가 있습니다.

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

이 클래스의 두 인스턴스가 있는데, 각각 foo bar 에 대해 동일한 값을가집니다.

x = MyClass('foo', 'bar')
y = MyClass('foo', 'bar')

그러나 동등성을 비교하면 Python은 False 를 반환합니다.

>>> x == y
False

파이썬이이 두 객체를 동일하게 간주하게하려면 어떻게해야합니까?

 

해결 방법

 


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

    def __eq__(self, other): 
        if not isinstance(other, MyClass):
            # don't attempt to compare against unrelated types
            return NotImplemented

        return self.foo == other.foo and self.bar == other.bar

이제 다음을 출력합니다.

>>> x == y
True

__ eq __ 를 구현하면 클래스의 인스턴스를 자동으로 해시 할 수 없게됩니다. 즉, 집합과 사전에 저장할 수 없습니다. 변경 불가능한 유형을 모델링하지 않는 경우 (즉, foo bar 속성이 객체의 수명 동안 값을 변경할 수있는 경우) 인스턴스를 그대로 두는 것이 좋습니다. 해시 할 수 없습니다.


class MyClass:
    ...

    def __hash__(self):
        # necessary for instances to behave sanely in dicts and sets.
        return hash((self.foo, self.bar))

__ dict __ 를 반복하고 값을 비교하는 아이디어와 같은 일반적인 솔루션은 권장되지 않습니다. .


 

참조 페이지 https://stackoverflow.com/questions/1227121

 

 

반응형

댓글