**Feature** An example where this currently fails is: ```python 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: ```python 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 ```python 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.
Activity
jorenham commentedon Nov 12, 2025
Similarly, it would also be cool if
var.__class__ is Twould narrowvartoTRework narrowing logic for equality and identity (python#20492)