You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
from __future__ importannotationsclassX: ...
classY:
@propertydefsome_property(self) ->Descriptor: # return Descriptor instancereturnDescriptor()
classDescriptor:
def__get__(self, obj: X, cls: type[X]) ->int: # can work only with X instancesprint(f'Descriptor.__get__({self}, {obj}, {cls}) called')
return0y=Y()
print(y.some_property)
# arg-type: Argument 1 to "__get__" of "Descriptor" has incompatible type "Y"; expected "X"# arg-type: Argument 2 to "__get__" of "Descriptor" has incompatible type "Type[Y]"; expected "Type[X]"# stdout: <__main__.Descriptor object at 0x0000020BF8A5BE20># note that Descriptor.__get__ isnt called
I am defining descriptor that can work only with X instances, and i am returning this descriptor from property of Y instances.
At runtime Descriptor.__get__ isnt called, but mypy thinks that Y.some_property is Descriptor (not a property returning Descriptor instance), tries to execute descriptor protocol and fails.
At runtime i am getting no errors, descriptor isnt called and this code is safe.
To reproduce:
just run mypy with this code
Expected Behavior
no errors
Actual Behavior
error
Your Environment
Mypy version used: mypy 0.971 (compiled: yes)
Mypy command-line flags: none
Mypy configuration options from mypy.ini (and other config files): none
Python version used: 3.10.6
Operating system and version: Win10
The text was updated successfully, but these errors were encountered:
This code is fine.
But if i uncomment # some_descriptor: Descriptor line i am getting errors:
at `self.some_descriptor = Descriptor()` line:
Argument 1 to "__get__" of "Descriptor" has incompatible type "Y"; expected "X"
Argument 2 to "__get__" of "Descriptor" has incompatible type "Type[Y]"; expected "Type[X]"
Incompatible types in assignment (expression has type "Descriptor", variable has type "int")
at `print(y.some_descriptor)` line:
Argument 1 to "__get__" of "Descriptor" has incompatible type "Y"; expected "X"
Argument 2 to "__get__" of "Descriptor" has incompatible type "Type[Y]"; expected "Type[X]"
Consider this example:
I am defining descriptor that can work only with
X
instances, and i am returning this descriptor from property ofY
instances.At runtime
Descriptor.__get__
isnt called, but mypy thinks thatY.some_property
isDescriptor
(not a property returningDescriptor
instance), tries to execute descriptor protocol and fails.At runtime i am getting no errors, descriptor isnt called and this code is safe.
To reproduce:
Expected Behavior
Actual Behavior
Your Environment
mypy 0.971 (compiled: yes)
mypy.ini
(and other config files): noneThe text was updated successfully, but these errors were encountered: