당신의 독서가 올바르지 않습니다
은 사용자 정의 두 개의 인스턴스가 동일한 것으로 가정된다 True
반환 __eq__
방법을 추가합니다. 동등 검사에는 __eq__
메서드가 사용됩니다. 이 문서에는 값이 및 b
인 a == b
(즉, a.__eq__(b)
)의 두 객체에 대해 동일해야한다는 내용 만 나와 있습니다.
이것은 일반적인 논리 실수입니다. a == b
이 참일 경우 은을 의미합니다. hash(a) == hash(b)
도 참입니다. 그러나 의미가 반드시 등가을 의미하는 것은 아니며, hash(a) == hash(b)
은 a == b
을 의미합니다.
MyClass
의 모든 인스턴스를 서로 동일하게 비교하려면 __eq__
메서드를 제공해야합니다. 그렇지 않으면 파이썬은 신분을과 비교할 것입니다.이것은 할 수 있습니다 지금
class MyClass(object):
def __hash__(self):
return 0
def __eq__(self, other):
# another object is equal to self, iff
# it is an instance of MyClass
return isinstance(other, MyClass)
:
: 현실에서
>>> result = set()
>>> result.add(MyClass())
>>> result.add(MyClass())
1
당신은 예를 들어, __eq__
비교를 위해 사용되는 개체의 해당 속성에 __hash__
기초 것
class Person
def __init__(self, name, ssn):
self.name = name
self.ssn = ssn
def __eq__(self, other):
return isinstance(other, Person) and self.ssn == other.ssn
def __hash__(self):
# use the hashcode of self.ssn since that is used
# for equality checks as well
return hash(self.ssn)
p = Person('Foo Bar', 123456789)
q = Person('Fake Name', 123456789)
print(len({p, q}) # 1