python / python/mypy

Improve Liskov checks with overloads in subclass

Open
#15,121 0 comments 0 reactions 0 assignees View on GitHub

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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.