だから、writing extensionのためのPythonのドキュメントは、この言う:。Pythonのインスタンス変数と属性の違い?
は、「我々は、属性として、当社のインスタンス 変数を公開することを行う方法の 多数あり 最も簡単な方法は、メンバー を定義することです。定義:
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;
をので、私の質問は、なぜ我々は両方の場所に入れていることです。私の印象は、型とインスタンスの両方にそれらを持たせて、インスタンスが更新されると型の値を保持したいからです。しかし、その場合、クラス属性を変更した場合、インスタンス値はどのように更新されますか?あなたがCのコードを記述する必要があり、そしてあなたはそれがPythonのデータであるかのように、それはあなたのCのデータを操作できるように、Pythonのに十分な情報を提供する必要があるため、C拡張を書く
>>> class foo(object): x = 4
...
>>> f = foo()
>>> f.x
4
>>> foo.x = 5
>>> f.x
5
Pythonには、Cソースコードを調べ、 'struct'のメンバーの名前と型を見ることはできません。その情報は通常、コンパイルされたコードには存在しないので、Pythonがそこにアクセスできるようにする必要があります。 – kindall