mypy icon indicating copy to clipboard operation
mypy copied to clipboard

Reassigned `@property` is typed as `Callable`

Open Avasam opened this issue 3 years ago • 1 comments

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

Avasam avatar Oct 31 '22 20:10 Avasam

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]

niklasmohrin avatar Jan 16 '23 17:01 niklasmohrin

Issue is confirmed to affect both 1.8 and master. mypy-play.net gist

finite-state-machine avatar Jan 26 '24 15:01 finite-state-machine

This might be the same as #6700.

finite-state-machine avatar Jan 26 '24 15:01 finite-state-machine

This might be the same as #6700.

You are right. Closing as duplicate

Avasam avatar Jan 26 '24 18:01 Avasam