Search code examples
pythonpylint

Why does pylint not detect missing member functions (E1103) in lists?


When running pylint on a particular piece of code, I get false negatives for missing functions if the variables have been added to lists with .append() or += [var]. Is there any way to avoid having pylint lose the variable type here? (pylint 0.27.0, python 2.7.2)

#!/usr/bin/python

from foo.lib.machine import Machine
lh = Machine('localhost')

lh.is_reachable()      #Pylint catches this
machines = [lh]
m2 = []
m2.append(lh)
m3 = []
m3 += [lh]
for m in machines:
    m.is_reachable()   #Pylint catches this
for m in m2:
    m.is_reachable()   #Pylint MISSES this
for m in m3:
    m.is_reachable()   #Pylint MISSES this
$ pylint -i y -E pylintcheck
No config file found, using default configuration
************* Module pylintcheck
E1101:  6,0: Instance of 'Machine' has no 'is_reachable' member
E1101: 13,4: Instance of 'Machine' has no 'is_reachable' member

Solution

  • Ned is right. For the record, when pylint tries to know what's inside a e.g. list, it only considers statements that defines this list, not all accesses to it. That explains why in your sample case, it detects correctly what's in machines but not in m2 or m3 (considered empty).