Reassigned `@property` is typed as `Callable`
Bug Report
Mypy seems to forget about the @property decorator if the property is aliased.
To Reproduce
class MyClass:
def error(self) -> bool:
# Incompatible return value type (got "Callable[[], bool]", expected "bool") [return-value]
return self.prop_alias
def works(self) -> bool:
# No error
return self.prop
@property
def prop(self) -> bool:
return True
prop_alias = prop
some_boolean: bool
instance = MyClass()
# Incompatible types in assignment (expression has type "Callable[[], bool]", variable has type "bool") [assignment]
some_boolean = instance.prop_alias
# No error
some_boolean = instance.prop
Expected Behavior
prop_alias should be usable as a boolean, just like prop
Actual Behavior
prop_alias is seen as a Callable
Your Environment
- Mypy version used: 0.982 (compiled: yes)
- Mypy command-line flags: None
- Mypy configuration options from
mypy.ini(and other config files):
[mypy]
show_error_codes = True
strict = False
namespace_packages = True
- Python version used: 3.9.13
I'm not sure if this is related to https://github.com/python/mypy/issues/2563 and https://github.com/python/mypy/issues/11619
Same behavior on
$ mypy --version
mypy 0.991 (compiled: no)
$ python --version
Python 3.10.9
without config. Result:
class Foo:
@property
def bar(self):
return 42
baz = bar
x: int = Foo().bar # works
# x: int = Foo().baz # error: Incompatible types in assignment (expression has type "Callable[[], Any]", variable has type "int") [assignment]
Issue is confirmed to affect both 1.8 and master. mypy-play.net gist
This might be the same as #6700.
This might be the same as #6700.
You are right. Closing as duplicate