pylint-dev/pylint
Dynamic `__getattr__` still leads to `no-member` if inference is ambiguous
Chiusa
#9833 aperta il 25 lug 2024
False Positive 🦟Good first issueHacktoberfestNeeds PR
Metriche repository
- Star
- (4978 stelle)
- Metriche merge PR
- (Metriche PR in attesa)
Descrizione
Bug description
"""
The following code should lint without errors, but pylint shows:
test.py:28:6: E1101: Instance of 'A' has no 'any' member (no-member)
"""
# pylint: disable=too-few-public-methods
class A:
"""class without attributes"""
class B:
"""class with any attribute"""
def __getattr__(self, name):
return None
# uncomment to remove the error
# any = 1
def a_or_b(p) -> A | B:
"""function, which may return an instance of A or B"""
if p == "a":
return A()
return B()
x: B = a_or_b("b") # we have annotated that x is an instance of B
print(x.any) # pylint shows E1101 (no-member)
# this does not cause an error in any case
y = B()
print(y.any)
Configuration
No response
Command used
pylint test.py
Pylint output
************* Module test
test.py:28:6: E1101: Instance of 'A' has no 'any' member (no-member)
Expected behavior
no error
Pylint version
pylint 3.2.6
astroid 3.2.4
Python 3.10.12
OS / Environment
$ uname -a Linux xxx 5.15.0-112-generic #122-Ubuntu SMP Thu May 23 07:48:21 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
Additional dependencies
No response