Was ist der Zweck, Super in benutzerdefinierten Fehlerklassen in Python aufzurufen?

8

Also habe ich eine einfache benutzerdefinierte Fehlerklasse in Python, die ich basierend auf der Python 2.7 Dokumentation erstellt habe:

%Vor%

Das gibt mir W0231: __init__ method from base class %r is not called in PyLint Warnung so gehe ich es sehen und da bin, das sehr hilfreich Beschreibung der „Erklärung nötig.“ Ich würde normalerweise nur diesen Fehler ignorieren, aber ich habe bemerkt, dass eine Tonne Code online einen Aufruf von super am Anfang des enthält init Methode der Klassen benutzerdefinierte Fehler so ist meine Frage: Ist dies tatsächlich tun, dienen ein Zweck oder sind es nur Leute, die versuchen, eine gefälschte pylint Warnung zu beschwichtigen?

    
Rachel Hutchison 09.08.2016, 17:14
quelle

2 Antworten

10

Dies war eine gültige Pylint-Warnung: Wenn Sie die Oberklasse __init__ nicht verwenden, können Sie Implementierungsänderungen in der Elternklasse übersehen. Und tatsächlich haben Sie - weil BaseException.message ab Python 2.6 veraltet ist.

Hier wäre eine Implementierung, die Ihre Warnung W0231 vermeidet und außerdem Pythons Verwarnungswarnung bezüglich des Attributs message vermeidet.

%Vor%

Dies ist ein besserer Weg, denn die Implementierung für BaseException.__str__ betrachtet nur das 'args' Tupel, es sieht überhaupt keine Nachricht an. Mit Ihrer alten Implementierung hätte print InvalidTeamError() nur eine leere Zeichenfolge gedruckt, was wahrscheinlich nicht das ist, was Sie wollten!

    
wim 09.08.2016, 18:12
quelle
-1

Betrachtet man den cpython2.7-Quellcode, sollte es kein Problem geben, diesen Aufruf von super init zu vermeiden, und Ja, weil es im Allgemeinen eine gute Übung ist, die Basisklassen-Init in Ihrem init.

Ссылка siehe Zeile 60 für BaseException init und Zeile 456, wie Exception von BaseException abgeleitet wird .

    
psydroyd 09.08.2016 18:08
quelle