Abstrakte Klasse kann nicht mit abstrakten Methoden instanziiert werden

10

Ich arbeite an einer Art Lib, und aus einem seltsamen Grund habe ich diesen Fehler.

  • Hier ist mein Code. Natürlich muss @ abc.abstractmethod unkommentiert sein
  • Hier sind meine Tests

Sorry konnte nicht einfach kopieren und einfügen

Ich ging davon aus, dass der folgende Code funktioniert

test.py

%Vor%

In der Python-Shell

%Vor%

Warum für mein Roster Modul habe ich diesen Fehler

%Vor%

Vielen Dank im Voraus

    
josuebrunel 16.07.2015, 15:00
quelle

1 Antwort

15

Ihr Problem kommt, weil Sie die abstrakten Methoden in Ihrer abstrakten Basisklasse mit vorangestelltem __ (doppelter Unterstrich) definiert haben. Dies führt dazu, dass Python zu der Zeit name mangling ausführt der Definition der Klassen.

Die Namen der Funktion ändern sich von __json_builder nach _Base__json_builder oder __xml_builder nach _Base__xml_builder . Und das ist der Name, den Sie in Ihrer Unterklasse implementieren / überschreiben müssen.

Um dieses Verhalten in Ihrem Beispiel zu zeigen -

%Vor%

Wenn ich die Implementierung in die folgende ändern, funktioniert es

%Vor%

Aber das ist sehr langwierig. Vielleicht möchten Sie darüber nachdenken, ob Sie Ihre Funktionen wirklich mit __ (doppelter Unterstrich) definieren wollen. Sie können mehr über hier .     

Anand S Kumar 16.07.2015, 15:32
quelle

Tags und Links