Skip to content

False positive for no-member with property setters #9811

Closed
pylint-dev/astroid
#2567
@mdegat01

Description

@mdegat01

Bug description

"""test_lint.py"""

# pylint: disable=R0903


class CoreSys:
    """CoreSys object."""

    def __init__(self) -> None:
        """Initialize CoreSys."""
        self._host: "Host" | None = None

    @property
    def host(self) -> "Host":
        """Get host."""
        if not self._host:
            raise RuntimeError("Host not set!")
        return self._host

    @host.setter
    def host(self, value: "Host") -> None:
        """Set Host."""
        self._host = value

    @property
    def timezone(self) -> str:
        """Get timezone."""
        if self.host.info.timezone:
            return self.host.info.timezone
        return "UTC"


class CoreSysAttributes:
    """CoreSysAttributes object."""

    coresys: CoreSys

    @property
    def sys_host(self) -> "Host":
        """Get host."""
        return self.coresys.host

class Info(CoreSysAttributes):
    """Info object."""

    def __init__(self, coresys: CoreSys) -> None:
        """Initialize info."""
        self.coresys = coresys
        self._timezone: str | None = None

    @property
    def timezone(self) -> str | None:
        """Get timezone."""
        return self._timezone

    @timezone.setter
    def timezone(self, value: str | None) -> None:
        """Set timezone."""
        self._timezone = value

class Host(CoreSysAttributes):
    """Host object."""

    def __init__(self, coresys: CoreSys) -> None:
        """Initialize host object."""
        self.coresys = coresys
        self._info = Info(coresys)

    @property
    def info(self) -> Info:
        """Get info."""
        return self._info

Configuration

No response

Command used

pylint test_lint.py

Pylint output

************* Module test_lint
test_lint.py:28:11: E1101: Instance of 'CoreSys' has no 'info' member (no-member)
test_lint.py:29:19: E1101: Instance of 'CoreSys' has no 'info' member (no-member)

Expected behavior

This should not show an error, all members referenced are defined. Notably it does not show an error in 3.12.3, appears to be a regression with 3.12.4

Pylint version

pylint 3.2.5
astroid 3.2.3
Python 3.12.4 (main, Jul 17 2024, 10:41:37) [Clang 15.0.0 (clang-1500.3.9.4)]

OS / Environment

MacOS 14.4.1

We also are seeing it in ubuntu containers running in github actions, like this run: https://github.com/home-assistant/supervisor/actions/runs/9904839873/job/27515699355 (same issue, appeared on upgrade to 3.12.4).

Additional dependencies

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    AstroidRelated to astroidNeeds PRThis issue is accepted, sufficiently specified and now needs an implementationNeeds astroid updateNeeds an astroid update (probably a release too) before being mergableRegressionproperties

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions