Improve Liskov checks with overloads in subclass
Open
Nobody has claimed this yet.
affects-typeshed
bug
topic-inheritance
- Dominant language
- Python
- Stars
- 20.6k
- Forks
- 3.3k
- PR merge metrics
- PR metrics pending
Description
The following program is type safe:
from typing import overload
class A: ...
class B: ...
class Parent:
def dst(self, x: A | B) -> int | None: ...
class Child(Parent):
@overload
def dst(self, x: A) -> int: ...
@overload
def dst(self, x: B) -> None: ...
This came up in https://github.com/python/typeshed/pull/9862
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the provided Python example and review the linked typeshed pull request for the intended overload behavior. Trace mypy's current subclass compatibility check and its diagnostic for this case. Done means the type-safe subclass is accepted while incompatible overrides remain rejected.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- devtools
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100