Open
Description
This works as expected:
class A:
pass
class B(A):
pass
class C(A):
pass
assert hash(B) != hash(C)
assert hash(B()) != hash(C())
=========================== 1 passed in 3.39 seconds ===========================
This errors:
import attr
@attr.s(frozen=True)
class A:
pass
class B(A):
pass
class C(A):
pass
assert hash(B) != hash(C)
assert hash(B()) != hash(C())
> assert hash(B()) != hash(C())
E AssertionError: assert 7618298384354620882 != 7618298384354620882
E + where 7618298384354620882 = hash(B())
E + where B() = <class 'test_attr_bug.<locals>.B'>()
E + and 7618298384354620882 = hash(C())
E + where C() = <class 'test_attr_bug.<locals>.C'>()
So these two instantiated classes hash to the same value despite a) being instances of different classes and b) being of classes which, when uninstantiated, have differing hashes.
This seems very wrong to me!