[Python-projects] pylint: class methods created by metaclass not recognized
Sylvain =?UTF-8?Q?Th=E9nault?=
sylvain.thenault at logilab.fr
Mon Oct 29 10:00:03 CET 2007
On Sun, Oct 28, 2007 at 11:26:35AM +0000, Amorilia wrote:
> Pylint 0.13.2 says "Instance of 'XYZ' has no 'xyz' member" when a
> class XYZ has a method xyz created by its metaclass. Attached is a
> very simple example triggering the bug. (The use case I'm interested
> in is a metaclass which parses an xml file in order to serialize,
> among many other things, attribute creation in a class, on which I'm
> getting of course a huge amount of these pylint errors.)
>
> Aside, I looked into checkers/typecheck.py in an attempt to fix it as
> the error seems to be triggered there. I was a bit lost in the code
> though. Does pylint actually instantiate metaclasses of classes (i.e.
> create the classes) that it must check?
no that's the problem, there is no actual metaclass support in astng
(pylint's code representation). This has been planned for a while now
but is not yet implemented :(
> """Simple metaclass example."""
>
> from types import MethodType
>
> class MetaIncrement(type):
> """A metaclass that adds an 'increment' and 'decrement' function to the
> class implementation."""
> def __init__(cls, name, bases, dct):
> """Add an 'increment' function to the class cls."""
> super(MetaIncrement, cls).__init__(name, bases, dict)
> print "instanciating metaclass..."
> print " class : %s" % name
> print " bases : %s" % (bases,)
> print " dict : %s" % dct
> setattr(cls, 'increment', lambda self, k : k+1)
> setattr(cls, 'decrement', lambda self, k : k-1)
>
> class Test:
> """A basic class with MetaIncrement metaclass."""
> __metaclass__ = MetaIncrement
> def __init__(self):
> """Print functions."""
> print "instanciating class..."
> print " methods:"
> for attrname in dir(self):
> if isinstance(getattr(self, attrname), MethodType):
> print " %s" % attrname
>
> TESTVAR = Test()
> print(TESTVAR.increment(3))
> print(TESTVAR.decrement(10))
>
> _______________________________________________
> Python-Projects mailing list
> Python-Projects at lists.logilab.org
> http://lists.logilab.org/mailman/listinfo/python-projects
--
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