2009-12-23 6 views

Antwort

5

Es gefunden! Es kommt nur darauf an, das Element tp_dict des type-Objekts zu setzen und für jede der statischen Variablen zusätzliche Einträge hinzuzufügen. Der folgende C-Code erstellt dieselbe statische Variable wie der obige Python-Code:

PyTypeObject type; 
// ...other initialisation... 
type.tp_dict = PyDict_New(); 
PyDict_SetItemString(type.tp_dict, "bar", PyInt_FromLong(1)); 
2

Sie können diesen Quellcode mit den entsprechenden Flags an Py_CompileString übergeben.

Wenn Sie bereits die Klasse haben, können Sie PyObject_SetAttr verwenden.

+0

Vielen Dank für den Vorschlag! Es scheint ein bisschen Umweg zu sein, es zu tun - gibt es etwas, das PyModule_AddIntConstant für Klassen ähnlich ist? – Vil

+0

Entschuldigung, ich habe gerade erst bemerkt, dass du deine Antwort aktualisiert hast. Danke nochmal für die Hilfe. Ich habe versucht, mit PyObject_SetAttr, aber egal, wenn ich es anrufe bekomme ich einen TypeError mit der Nachricht "kann Attribute der eingebauten/Erweiterungstyp X nicht setzen" (wobei X ist mein Typ Name). Mache ich etwas falsch oder funktioniert das einfach nicht mit Typobjekten? – Vil

+0

Sie sollten Ihren Code einfügen? – joeforker

Verwandte Themen