8000 Oops, Generic.__eq__ was too generous. · python/typing@81fdd0b · GitHub
[go: up one dir, main page]

Skip to content

Commit 81fdd0b

Browse files
author
Guido van Rossum
committed
Oops, Generic.__eq__ was too generous.
1 parent 309369f commit 81fdd0b

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

prototyping/test_typing.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -610,6 +610,24 @@ class Y(C[int]):
610610
assert Y.__qualname__ == 'GenericTests.test_repr_2.<locals>.Y'
611611
assert repr(Y).split('.')[-1] == 'Y[int]'
612612

613+
def test_eq_1(self):
614+
assert Generic == Generic
615+
assert Generic[T] == Generic[T]
616+
assert Generic[KT] != Generic[VT]
617+
618+
def test_eq_2(self):
619+
620+
class A(Generic[T]):
621+
pass
622+
623+
class B(Generic[T]):
624+
pass
625+
626+
assert A == A
627+
assert A != B
628+
assert A[T] == A[T]
629+
assert A[T] != B[T]
630+
613631

614632
class UndefinedTest(TestCase):
615633

prototyping/typing.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -715,10 +715,11 @@ def __repr__(self):
715715
def __eq__(self, other):
716716
if not isinstance(other, GenericMeta):
717717
return NotImplemented
718-
return other.__parameters__ == self.__parameters__
718+
return (self.__name__ == other.__name__ and
719+
self.__parameters__ == other.__parameters__)
719720

720721
def __hash__(self):
721-
return hash(self.__parameters__)
722+
return hash((self.__name__, self.__parameters__))
722723

723724
def __getitem__(self, params):
724725
if not isinstance(params, tuple):

0 commit comments

Comments
 (0)
0