diff --git a/runtype/base_types.py b/runtype/base_types.py index 53e319b..28146af 100644 --- a/runtype/base_types.py +++ b/runtype/base_types.py @@ -52,6 +52,11 @@ def __mul__(self, other: _Type): def __le__(self, other): return NotImplemented + def __hash__(self): + # __eq__ defined in eq() + return hash(type(self)) + + class AnyType(Type): """Represents the Any type. @@ -293,6 +298,10 @@ def ge(self, other): def eq(self, other): return NotImplemented +@dp +def eq(self: Type, other: Type): + return type(other) is type(self) + @dp def eq(self: SumType, other: SumType): return self.types == other.types diff --git a/runtype/pytypes.py b/runtype/pytypes.py index b96a506..822f734 100644 --- a/runtype/pytypes.py +++ b/runtype/pytypes.py @@ -177,6 +177,15 @@ def cast_from(self, obj): return obj + def __eq__(self, other): + if type(other) != type(self): + return False + return self.kernel == other.kernel + + def __hash__(self): + return hash((type(self), self.kernel)) + + class TupleType(PythonType): def test_instance(self, obj, sampler=None): return isinstance(obj, tuple)