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"
.
Aber jetzt bekomme ich einen Syntaxfehler, wenn ich versuche, zu zeigen, dass _NeighborhoodDistance
eine Unterklasse von _NodeDistance
ist. Was habe ich falsch gemacht?
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:
... 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%