-
-
Notifications
You must be signed in to change notification settings - Fork 3k
Open
Labels
Description
Feature
An example where this currently fails is:
t: type[str | int]
assert t is int # t == int also fails
reveal_type(t) # gives type[str] | type[int]
I would like the assertion on line 2 to narrow the type of t
to type[int]
.
More generally, using is
on a type
should narrow that type.
Here is another use case:
def __eq__(self, obj: object) -> bool:
return type(self) is type(obj) and self.value == obj.value
Currently, there is an issue that "object has no attribute value".
This can be avoided with
def __eq__(self, obj: object) -> bool:
return type(self) is type(obj) and self.value == cast(Self, obj).value
# or
return isinstance(obj, type(self)) and isinstance(self, type(obj))and self.value == obj.value
But it would be great if the cast were avoided in this idiomatic check.
I don't know enough about Mypy's implementation to know how this would fit in, but I expect that isinstance
and issubclass
checks could be extended.