Closed
Description
Bug Report
Since updating from 1.1.1 to 1.2.0 the following code does not pass anymore.
Reading the change log I am assuming this might be related to #14882.
To Reproduce
#!/usr/bin/env python3
import typing
if typing.TYPE_CHECKING:
from typing_extensions import Self
T_co = typing.TypeVar('T_co', covariant=True)
class Config(typing.Generic[T_co]):
def __init__(self, value: T_co) -> None:
self.value = value
@typing.overload
def __get__(self, instance: None, owner: typing.Any = None) -> 'Self':
pass
@typing.overload
def __get__(self, instance: typing.Any, owner: typing.Any = None) -> T_co:
pass
def __get__(self, instance: typing.Any, owner: typing.Any = None) -> 'T_co|Self':
if instance is None:
return self
return self.value
class MultiConfig(Config[T_co]):
def __init__(self, val: T_co) -> None:
super().__init__(val)
self.values: 'dict[object, T_co]' = {}
@typing.overload
def __get__(self, instance: None, owner: typing.Any = None) -> 'Self':
pass
@typing.overload
def __get__(self, instance: typing.Any, owner: typing.Any = None) -> T_co:
pass
def __get__(self, instance: typing.Any, owner: typing.Any = None) -> 'T_co|Self':
if instance is None:
return self
return self.values.get(instance.config_id, self.value)
Expected Behavior
This code should pass, as it did in 1.1.1.
Actual Behavior
$ mypy --strict mwe.py
mwe.py:35: error: Signature of "__get__" incompatible with supertype "Config" [override]
mwe.py:35: note: Superclass:
mwe.py:35: note: @overload
mwe.py:35: note: def __get__(self, instance: Any, owner: Any = ...) -> T_co
mwe.py:35: note: Subclass:
mwe.py:35: note: @overload
mwe.py:35: note: def __get__(self, instance: None, owner: Any = ...) -> MultiConfig[T_co]
mwe.py:35: note: @overload
mwe.py:35: note: def __get__(self, instance: Any, owner: Any = ...) -> T_co
Found 1 error in 1 file (checked 1 source file)
Your Environment
- Mypy version used: 1.2.0
- Mypy command-line flags:
--strict
(but it does not make a difference) - Mypy configuration options from
mypy.ini
(and other config files): none - Python version used: Python 3.10.10