2016-12-22 2 views
0

Ich experimentiere mit dem Freilegen einiger C++ - Klassen über Cython. Ich habe das Tutorial here gelesen, die darauf hindeuten, dass es tut, aber wenn ich @propery Dekoratoren verwende, funktioniert es nicht.unterstützt Cython die Syntax @property?

Nun, eigentlich funktioniert es für bekommen, aber ein @foo.setter schlägt mit TypeError: 'property' object is not callable.

Gemäß this thread unterstützt Cython nicht vollständig.

Ich konnte Klassenattribute mit der beschriebenen Syntax here verfügbar machen, aber sie sagen, dass es veraltet ist!

Also, was ist das Geschäft ?!

+0

Welche Version verwenden Sie? Es tut, aber es ist eine relativ neue Ergänzung. – DavidW

+0

Der Code, der nicht kompiliert werden könnte, wäre auch nützlich – DavidW

+0

@DavidW das war das Problem. Ich war auf 0.23.4. Ich habe nur auf 0.25.2 aktualisiert und die \ @property-Syntax funktioniert wie erwartet. Fühlen Sie sich frei, eine Antwort zu posten und ich werde es akzeptieren. Wann wurde die vollständige Unterstützung für \ @property hinzugefügt? – Stephen

Antwort

0

Ok, hier ist der Deal.

Am Ende des Tages verwendete ich eine veraltete Version von Cython. Insbesondere verwendete ich 0,23,4. Als ich auf 0.25.2 aktualisierte, funktionierte die Syntax "gerade".

Allerdings ist die Cython-Dokumentation dazu in dem Sinne schlecht, dass es über Eigenschaften in zwei verschiedenen Teilen der Dokumentation spricht und nur in einem spricht man über die "neue" Syntax. An der anderen Stelle heißt es einfach, dass die Syntax (nicht) veraltet ist.

In meiner Frage verweise ich auf die offiziellen (und aktuellen) Dokumente, die @propertyhere nicht erwähnen. Beachten Sie, dass dies im "Referenzhandbuch" beschrieben ist.

Wenn Sie stattdessen here suchen, finden Sie die neue @property Syntax. Beachten Sie, dass dies das "Benutzerhandbuch" ist.

Ich habe keine Ahnung, warum die Cython-Dokumente ein Referenzhandbuch und ein Benutzerhandbuch haben, die das gleiche Thema diskutieren, aber man lässt wichtige Informationen aus. Diese Antwort hier, um dem nächsten eigenwilligen Cython-Neuling zu helfen, dies herauszufinden.

+0

Das liegt daran, dass Sie sich nicht freiwillig gemeldet haben, die Dokumente mit den Codeänderungen in Einklang zu bringen! Pakete wie diese werden von Freiwilligen gepflegt und entwickelt. Erweiterungen wie diese erfordern Änderungen in einer oder mehreren Codedateien, Testdateien und Dokumentationsdateien. Je nach Fokus und Erfahrung des/der Entwickler (s) ist es sicherlich möglich, einen der Dokumentationsabschnitte zu verpassen. – hpaulj

+0

https://github.com/cython/cython/commit/fbe97f7f6de03c27a6d79d027445a265ecafeba9 - ein commit 'Update docs wrt property syntax depreciation' – hpaulj

+0

@hpaulj, Sie kommentieren ist gut gemacht. Ich werde mich um einen Beitrag kümmern, sobald ich Cython besser beherrsche. – Stephen