Skip to content

Mypy doesn't object to property methods that don't exist #18327

Open
@tungol

Description

@tungol

Bug Report

Mypy includes functools.cached_property on it's list of property-list types, but considers it to be too identical to property. It allows the use of cached_property.setter and cached_property.deleter without raising an error, despite the fact that neither of these are methods that exist on cached_property.

I discovered this while looking at permutations of property-like behavior for python/typeshed#13276.

Actually, I realized just now that it can be anything from any of the property types. See the second playground link.

To Reproduce

Playground link showing : https://mypy-play.net/?mypy=latest&python=3.12&gist=f5336c7a8df8f028a565bab576b74062

This one shows that mypy doesn't object to non-existent methods of property used as a decorator:

https://mypy-play.net/?mypy=latest&python=3.12&gist=d91764177a604ba5640a1fe741718f52

class PropertyTest1:
    _value: int | None = None

    @property
    def foo(self) -> int | None:
        return self._value

    @foo.whatever  # No error here
    def foo(self, value: int) -> None:
        self._value = value

Expected Behavior

I expect mypy to generate errors for methods that don't exist in the stubs, even with the special-cased behavior.

Actual Behavior

No errors are generated.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugmypy got something wrong

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions