Ich versuche, das neue __init_subclass__
-Feature von Python 3.6 ( PEP 487 ) zu verwenden ) mit dem abc
Modul. Es scheint nicht zu funktionieren. Der folgende Code:
ergibt folgendes beim Ausführen:
%Vor% Alles funktioniert gut, wenn Abstracted nicht die% metaclass ABCMeta
verwendet.
Dieser Fehler ist ziemlich resistent, der folgende Code zum Beispiel schlägt immer noch mit einem ähnlichen Typfehler fehl (vermutlich, weil eine Metaklasse ' __new__
zur Klasseninstanziierungszeit ausgeführt wird, während die Elternklasse' __new__
'erst ausgeführt wird Objekt Instanziierung).
Kann jemand bestätigen, dass dies ein Fehler in der Python 3.6 abc
-Modul- und / oder __init_subclass__
-Implementierung ist? (Ich könnte __init_subclass__
falsch verwenden.) Hat jemand einen Workaround?
Es ist ein Fehler in abc.ABCMeta
, aufgrund einer Warze im Design von __init_subclass__
. Ich empfehle es zu melden.
So ziemlich jede Metaklasse soll jetzt unerwartete Schlüsselwortargumente an super().__new__
weitergeben, damit type.__new__
sie an __init_subclass__
weitergeben kann, aber ABCMeta und wahrscheinlich Tonnen anderer Metaklassen tun das noch nicht. abc.ABCMeta.__new__
erstickt das Schlüsselwort x
, anstatt es zu übergeben, wodurch die angezeigte Ausnahme verursacht wird.
Der Versuch, __init_subclass__
Schlüsselwortargumente mit einer Metaklasse zu verwenden, die nicht für das neue Design aktualisiert wurde, wird nicht funktionieren. Du musst auf die Metaklassen warten, die du gepatcht hast.
Tags und Links python python-3.6