2 Stimmen

pylint falsch positiv für Superklasse __init__

Wenn ich eine Klasse ableiten von ctypes.BigEndianStructure pylint warnt, wenn ich nicht anrufe BigEndianStructure.__init__() . Großartig, aber wenn ich meinen Code korrigiere, warnt pylint immer noch:

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)

Zuerst dachte ich, das läge daran, dass Structure aus einem C-Modul stammt. Ich bekomme die Warnung nicht, wenn ich eine Subklasse von einer meiner Klassen oder, sagen wir, SocketServer.BaseServer was reines Python ist. Aber ich erhalte auch nicht die Warnung, wenn ich eine Unterklasse von smbus.SMBus die sich in einem C-Modul befindet.

Kennt jemand eine andere Lösung als die Deaktivierung von W0231?

6voto

jkp Punkte 74580

Versuchen Sie, den neuen Stil zu verwenden super Anrufe:

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

0 Stimmen

Ahh, das hätte man eigentlich versuchen müssen. Danke. Damit ist die Warnung behoben. Ich bin neugierig, aber, tun Struktur/BigEndianStructure verwenden super()? Der Rat, den ich gesehen habe, ist, super() zu verwenden, wenn die Superklasse super() verwendet...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X