반응형
두 개의 멤버 변수 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
반응형
'파이썬' 카테고리의 다른 글
파이썬 Indentation of IF-ELSE block in python (0) | 2021.02.09 |
---|---|
파이썬 python SimpleHTTPServer를 localhost에서만 실행할 수 있습니까? (0) | 2021.02.09 |
파이썬 matplotlib 등고선 플롯을 부드럽게하는 방법은 무엇입니까? (0) | 2021.02.09 |
파이썬 3의 수율 생성기에는 next () 함수가 없습니다. (0) | 2021.02.09 |
파이썬에서 다시 한 폴더로 이동하는 방법 (0) | 2021.02.09 |
댓글