python / mypy

Optional static typing for Python
https://www.mypy-lang.org/
Other
18.26k stars 2.79k forks source link

Incorrect private variables tracking #17767

Open socketpair opened 2 weeks ago

socketpair commented 2 weeks ago
from socket import socket

class BaseBackend:
        pass

class SystemProcess(BaseBackend):
    def __init__(self, single_process: bool = False) -> None:
        self.__sock = socket() if single_process else None

    def _prepare(self) -> None:
        pass

class WafEventSyncer(SystemProcess):
    def __init__(self) -> None:
        super().__init__(single_process=True)
        self.__sock = socket()

    def _prepare(self) -> None:
        self.__sock.bind('something')

MyPy 1.11.2 Python 3.12

main.py:19: error: Item "None" of "socket | None" has no attribute "bind"  [union-attr]

That's wrong because these are DIFFERENT private variables.

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

brianschubert commented 1 week ago

Possible duplicate of #8267, which currently has an open PR: #16715