Wie füge ich eine Eigenschaft zu einem Modul in boost :: python hinzu?

9

Sie können einer Klasse mit einem Getter und einem Setter (in einem vereinfachten Fall) eine Eigenschaft hinzufügen:

%Vor%

So können Sie es von Python wie folgt verwenden:

%Vor%

Aber wie fügt man einem Modul selbst eine Eigenschaft hinzu (keine Klasse)?

Es gibt

%Vor%

und

%Vor%

Ich kann globale Funktionen und Objekte meiner Klasse hinzufügen, indem ich die obigen zwei Möglichkeiten benutze, aber ich kann scheinen, dass Eigenschaften nicht wie in Klassen hinzugefügt werden.

    
Alex B 29.04.2010, 05:56
quelle

2 Antworten

2

__getattr__ und __setattr__ werden nicht für Module aufgerufen, daher können Sie dies nicht tun in normalem Python ohne Hacks (wie das Speichern einer Klasse im Modulwörterbuch). Angesichts dessen ist es sehr unwahrscheinlich, dass es auch in Boost Python eine elegante Methode gibt.

    
Matthew Flaschen 29.04.2010 06:08
quelle
2

boost.python / HowTo auf Python Wiki hat eine Beispiel für das Aussetzen eines C ++ - Objekts als Modulattribut in BOOST_PYTHON_MODULE :

%Vor%

Um das Attribut außerhalb von BOOST_PYTHON_MODULE zu setzen, verwenden Sie

%Vor%

Jetzt können Sie in Python etwas wie

tun %Vor%

Natürlich müssen Sie die Klasse von my_cpp_object im Voraus registrieren (z. B. können Sie dies innerhalb des gleichen BOOST_PYTHON_MODULE -Aufrufs tun) und sicherstellen, dass die Lebensdauer des C ++ - Objekts die des Python-Moduls übersteigt. Sie können bp::object anstelle von C ++ eins verwenden.

Beachten Sie, dass BOOST_PYTHON_MODULE Ausnahmen verschluckt. Wenn Sie also einen Fehler machen, erhalten Sie keine Fehlermeldung, und BOOST_PYTHON_MODULE -generated function kehrt sofort zurück. Um das Debuggen in diesem Fall zu erleichtern, können Sie Ausnahmen in BOOST_PYTHON_MODULE abfangen oder temporär eine Logging-Anweisung als letzte Zeile von BOOST_PYTHON_MODULE hinzufügen, um zu sehen, dass sie erreicht ist:

%Vor%     
Ilia K. 01.07.2013 00:03
quelle

Tags und Links