Cython-Syntax zum Deklarieren von Klassenhierarchien mit Aliasnamen

8

Hier ist eine abstrakte Basisklasse und eine konkrete Unterklasse, die ich über Cython Python zugänglich machen möchte:

%Vor%

Dies ist mein erster Versuch, die Schnittstelle der Klassen für Cython zu deklarieren. Um Namenskonflikte zwischen den cppclass es und den Python-Wrapperklassen zu vermeiden, erkläre ich jedes Class als _Class , gefolgt von seinem richtigen Namen "Namespace::Class" .

%Vor%

Aber jetzt bekomme ich einen Syntaxfehler, wenn ich versuche, zu zeigen, dass _NeighborhoodDistance eine Unterklasse von _NodeDistance ist. Was habe ich falsch gemacht?

%Vor%     
clstaudt 01.05.2014, 14:37
quelle

1 Antwort

2

Ich glaube nicht, dass Sie die Kombination aus Basisklasse und Umbenennung in Cython 0.20.1 sogar ausdrücken können. Sie können die Klassen entweder nicht umbenennen und den Namespace in cdef extern from angeben:

%Vor%

... oder nicht die Vererbung angeben:

%Vor%

In beiden Fällen scheint Cython die C ++ - Vererbung nicht vollständig zu verstehen, und Sie benötigen eine explizite Umwandlung:

%Vor%

Das ist hässlich, weil die Umwandlung die Typüberprüfung in C ++ effektiv deaktiviert, aber mit Vorsicht kann es sicher verwendet werden. (Es gibt andere Umstände, bei denen Cythons Typprüfungen Umwandlungen erfordern, die in C / C ++ nicht notwendig sind, was sehr bedauerlich ist.)

Hier sind die Klassen, die ich verwendet habe:

%Vor%     
Fred Foo 04.05.2014, 11:09
quelle

Tags und Links