Итак, документы 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;
поэтому мой вопрос в том, почему мы помещаем их в оба места. У меня сложилось впечатление, что это потому, что мы хотим, чтобы и тип, и экземпляр имели их, чтобы мы сохранили значения типов после обновления экземпляра. Но если это так, как значение экземпляра обновляется, если мы меняем атрибут класса? как это:
>>> class foo(object): x = 4
...
>>> f = foo()
>>> f.x
4
>>> foo.x = 5
>>> f.x
5