次のように述べるのは正しいですか:
PythonオブジェクトがC関数で作成されたが、関数がそれを返さない場合、必要はありません
INCREF
が、は必要DECREF
です。[false]関数がそれを返す場合は、戻り値を受け取る関数で、する必要があり
INCREF
ます。[/ false]C型変数をPythonオブジェクトなどの属性として割り当てる場合、
double
またはは必要ありません。int
INCREF
DECREF
以下は安全に使用できますか?Pythonオブジェクトを属性として他のPythonオブジェクトに割り当てるには、次のようにします。
PyObject *foo; foo = bar; // A Python object tmp = self->foo; Py_INCREF(foo); self->foo = foo; Py_XDECREF(tmp); // taken from the manual, but it is unclear if this works in every situation
Pythonオブジェクトの割り当て解除は
DECREF
、属性として持つ他のすべてのPythonオブジェクトに対して行う必要がありますが、Cタイプの属性に対しては行う必要はありません。
編集:
「属性としてのCタイプ」に関しては、barとbazを意味します。
typedef struct {
PyObject_HEAD
PyObject *foo;
int bar;
double baz;
} FooBarBaz;