2009-07-29 9 views
2

Si je dérive une classe de ctypes.BigEndianStructure, pylint avertit si je n'appelle pas BigEndianStructure. init(). Grand, mais si je fixe mon code, pylint avertit encore:pylint faux positif pour la superclasse __init__

import ctypes 

class Foo(ctypes.BigEndianStructure): 
    def __init__(self): 
     ctypes.BigEndianStructure.__init__(self) 

$ pylint mymodule.py 
C: 1: Missing docstring 
C: 3:Foo: Missing docstring 
W: 4:Foo.__init__: __init__ method from base class 'Structure' is not called 
W: 4:Foo.__init__: __init__ method from base class 'BigEndianStructure' is not called 
R: 3:Foo: Too few public methods (0/2) 

Au début, je pensais que cela parce que la structure vient d'un module C. Je ne reçois pas l'avertissement si je sous-classe d'une de mes classes ou, disons, SocketServer.BaseServer qui est pur python. Mais je ne reçois pas l'avertissement si je sous-classe de smbus.SMBus, qui est dans un module C.

Quelqu'un connaît une solution de contournement autre que la désactivation de W0231?

Répondre

6

Essayez d'utiliser le nouveau style super appels:

class Foo(ctypes.BigEndianStructure): 
    def __init__(self): 
     super(Foo, self).__init__() 
+0

Ahh, qui aurait dû être la chose évidente d'essayer. Merci. Il fixe l'avertissement. Je suis curieux cependant, est-ce que Structure/BigEndianStructure utilise super()? Le conseil que j'ai vu est d'utiliser super() si la superclasse utilise super() ... – bstpierre

Questions connexes