We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Accessing a field implementing the descriptor protocol via a property method causes MyPy to complain that there is no matching overload for __get__().
__get__()
Run MyPy with all default settings on the following code:
from typing import Optional from typing import overload from typing import Type class A: pass class Field: def __init__(self, attr: Optional["Field"] = None): self.attr = attr @property def crashing_property(self) -> Optional["Field"]: return self.attr @overload def __get__(self, instance: None, owner: Type["A"]) -> "Field": ... @overload def __get__(self, instance: "A", owner: Type["A"]) -> Optional["Field"]: ... def __get__(self, instance, owner): if not instance: return self return self.attr f = Field() # type: Field f.attr # Works fine f.crashing_property # Triggers "no overload variant"
n.b. adding __set__() makes no difference
__set__()
Accessing crashing_property shouldn't cause an error.
crashing_property
The last line in the example throws the following error:
test.py:39: error: No overload variant of "__get__" of "Field" matches argument types "Field", "Type[Field]" test.py:39: note: Possible overload variants: test.py:39: note: def __get__(self, instance: None, owner: Type[A]) -> Field test.py:39: note: def __get__(self, instance: A, owner: Type[A]) -> Optional[Field]
If you add this the code validates fine:
@overload def __get__(self, instance: "Field", owner: Type["Field"]): ...
mypy.ini
The text was updated successfully, but these errors were encountered:
Update: Still happening as of 0.910.
Sorry, something went wrong.
Still happening with MyPy 1.10.1 on Python 3.12.
No branches or pull requests
🐛 Bug Report
Accessing a field implementing the descriptor protocol via a property method causes MyPy to complain that there is no matching overload for
__get__()
.To Reproduce
Run MyPy with all default settings on the following code:
n.b. adding
__set__()
makes no differenceExpected Behavior
Accessing
crashing_property
shouldn't cause an error.Actual Behavior
The last line in the example throws the following error:
If you add this the code validates fine:
Your Environment
mypy.ini
(and other config files): None, using all defaultsThe text was updated successfully, but these errors were encountered: