Cython-Callback funktioniert korrekt für Funktion, aber nicht für gebundene Methode

8

Ich implementiere eine Cython-basierte Schnittstelle zu einer C ++ Bibliothek. Ich habe ein Callback-System implementiert, das mit normalen Funktionen funktioniert, aber beim Übergeben von gebundenen Methoden merkwürdig ausfällt. Hier ist ein Teil meines Cython-Codes:

%Vor%

Und so versuche ich es zu nennen:

%Vor%

Wenn dieser Code anfänglich ausgeführt wird, wird Folgendes gedruckt: <bound method RenderCanvas.OnDrillButtonPress of <UI.RenderCanvas; proxy of <Swig Object of type 'wxGLCanvas *' at 0x42b70a8> >>

Das scheint richtig. Das Problem ist, wenn der Rückruf ausgelöst wird, wird dies gedruckt: <bound method Shell.readline of <wx.py.shell.Shell; proxy of <Swig Object of type 'wxStyledTextCtrl *' at 0x3a12348> >>

Es wird eine völlig andere gebundene Methode aufgerufen. Wenn ich OnDrillButtonPress jedoch zu einer statischen Methode mache, %Code% wird sowohl beim Initialisieren als auch beim Auslösen von Anrufen gedruckt.

Gibt es eine Inkompatibilität beim Speichern gebundener Methoden als void *?

    
tkerwin 06.09.2011, 22:10
quelle

1 Antwort

3

Dank der Kommentare von Stefan Behnel und Mark Florisson zur Cython-Diskussionsgruppe ist das Problem, dass der Verweis auf meine gebundene Methode nicht mehr möglich ist und Müll gesammelt wird.

Die Lösung war, dies zu tun:

%Vor%

Wenn Sie einen Verweis auf die gebundene Methode in der Klasse beibehalten, wird sie erst bereinigt, wenn sie nicht mehr verwendet wird.

    
tkerwin 07.09.2011, 19:08
quelle

Tags und Links