У меня есть базовый тип, который я назову base_type
.Для базового типа я определил следующий массив PyGetSetDef
:
PyGetSetDef base_getsetters[] = {
{"field1", (getter) base_get_field1, (setter) base_set_field1, NULL, NULL},
{"field2", (getter) base_get_field2, (setter) base_set_field2, NULL, NULL},
{"field3", (getter) base_get_field3, (setter) base_set_field3, NULL, NULL},
{NULL}
};
и назначаю его соответствующим образом:
PyTypeObject base_type = {
...
.tp_getset = base_getsetters,
...
};
Я хочу расширить base_type
с помощью sub_type
,Я хочу, чтобы sub_type
унаследовал только получатели от base_type
, но при этом определяя новые установщики.
Так что после установки base_type
как .tp_base
в определении модуля для sub_type
, он будет иметь все те же поля, что и base_type
.Ура!Но это если я еще не определил никаких пользовательских сеттеров для sub_type
.
Я попробовал следующее:
PyGetSetDef sub_getsetters[] = {
{"field1", NULL, (setter) sub_set_field1, NULL, NULL},
{NULL}
};
Когда я создаю экземпляр sub_type
в Python, все триполя все еще там, и field2
и field3
все еще работают так же, как base_type
, но попытка прочитать field1
дает ошибку:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: attribute 'field1' of 'mymodule.sub_type' objects is not readable
Я предполагаю, что это потому, что яустановите getter на NULL
в определениях getter и setter sub_type
, но я не знаю, как определить только setter для типа.Это вообще возможно, или мне нужно переопределить метод получения, назначив тот же метод, который я использовал для base_type
?