因此,對於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 */"
然而,我們已經把實例變量的諾迪結構:
typedef struct {
PyObject_HEAD
PyObject *first;
PyObject *last;
int number;
} Noddy;
所以我的問題是,爲什麼我們把他們在這兩個地方。我的印象是,這是因爲我們希望類型和實例都具有它們,以便在實例更新後保留類型值。但是,如果是這種情況,如果我們更改類屬性,實例值如何更新?像這樣:
>>> class foo(object): x = 4
...
>>> f = foo()
>>> f.x
4
>>> foo.x = 5
>>> f.x
5
另一種說法是,Python無法查看C源代碼並查看struct的成員的名稱和類型。這些信息通常在編譯後的代碼中不存在,所以你必須把它放在那裏讓Python訪問它。 – kindall