Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Use type(var) is T to Narrow Types #20041

Copy link
Copy link
@George-Ogden

Description

@George-Ogden
Issue body actions

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.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      Morty Proxy This is a proxified and sanitized view of the page, visit original site.