したがって、拡張機能を作成するための python docs には次のように書かれています。
「インスタンス変数を属性として公開したいと考えています。それを行う方法はいくつかあります。最も簡単な方法は、メンバー定義を定義することです。
static PyMemberDef Noddy_members[] = { {"first", T_OBJECT_EX, offsetof(Noddy, first), 0, "first name"}, {"last", T_OBJECT_EX, offsetof(Noddy, last), 0, "last name"}, {"number", T_INT, offsetof(Noddy, number), 0, "noddy number"}, {NULL} /* Sentinel */ };
そして定義を tp_members スロットに入れます:
Noddy_members, /* tp_members */"
ただし、すでにインスタンス変数を Noddy 構造体に入れています。
typedef struct {
PyObject_HEAD
PyObject *first;
PyObject *last;
int number;
} Noddy;
私の質問は、なぜそれらを両方の場所に置くのかということです。私の印象は、インスタンスが更新されたときに型の値を保持するために、型とインスタンスの両方にそれらを持たせたいからです。しかし、その場合、class 属性を変更するとインスタンス値はどのように更新されるのでしょうか? このような:
>>> class foo(object): x = 4
...
>>> f = foo()
>>> f.x
4
>>> foo.x = 5
>>> f.x
5