[Python-projects] PyLint: Type inference fails on classmethod

Sylvain Thénault sylvain.thenault at logilab.fr
Fri Feb 9 09:13:19 CET 2007


On Thursday 08 February à 23:12, Sylvain Thénault wrote:
> On Tuesday 06 February à 19:40, Maarten ter Huurne wrote:
> > 
> > Hi,
> 
> Hey Maarten,
>  
> > When I run PyLint on this program:
> > ===
> > class Super(object):
> >         @classmethod
> >         def instance(cls):
> >                 return cls()
> > 
> > class Sub(Super):
> >         def method(self):
> >                 print 'method called'
> > 
> > Sub.instance().method()
> > ===
> > It prints:
> > ===
> > E1101: 10: Instance of 'Super' has no 'method' member
> > ===
> > 
> > The return type of "Sub.instance()" is "Sub", not "Super", so the method call
> > is valid, as you can see when you run this program.
> > 
> > So it seems that ASTNG infers the wrong type: "cls" is the class on which the
> > class method is called, which is not necessarily the class in which it is
> > defined.
> 
> huum, remember astng inference is dumb ;) I guess it should at least see
> that it may be wrong and return a YES object as well so that pylint
> don't issue a false positive.
> 
> I'll add this to the tracker tomorrow, thanks for the report.

http://www.logilab.org/3531

-- 
Sylvain Thénault                               LOGILAB, Paris (France)
Formations Python, Zope, Plone, Debian:  http://www.logilab.fr/formations
Développement logiciel sur mesure:       http://www.logilab.fr/services
Python et calcul scientifique:           http://www.logilab.fr/science



More information about the Python-Projects mailing list