Closed
Description
Bug Report
When two classes inherit from NamedTuple, I get an overlap error when I want to overload based on their type.
To Reproduce
https://mypy-play.net/?mypy=latest&python=3.12&gist=38e025ef049b6a1121cdd92c998e84a9
from typing import overload, NamedTuple
class A(NamedTuple):
pass
class B(NamedTuple):
pass
@overload
def frobnicate(arg: A) -> A: ...
@overload
def frobnicate(arg: B) -> B: ...
def frobnicate(arg: A | B) -> A | B:
if isinstance(arg, A):
return A()
elif isinstance(arg, B):
return B()
else:
raise TypeError()
Expected Behavior
I expect this to not cause an error. It does not report an error if A and B inherit from tuple, dict or object instead.
Actual Behavior
error: Overloaded function signatures 1 and 2 overlap with incompatible return types [overload-overlap]
Your Environment
- Mypy version used: 1.14.1
- Mypy command-line flags: (playground)
- Mypy configuration options from
mypy.ini
(and other config files): (playground) - Python version used: 3.12