我有一个基本类型,我将称之为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
的 getters ,但同时仍要定义新的setter。
因此,在base_type
的模块定义中将.tp_base
设置为sub_type
之后,它将具有与base_type
相同的所有字段。好极了!但这是如果我还没有为sub_type
定义任何自定义设置器的话。
我尝试了以下操作:
PyGetSetDef sub_getsetters[] = {
{"field1", NULL, (setter) sub_set_field1, NULL, NULL},
{NULL}
};
当我在Python中实例化sub_type
时,所有三个字段仍然存在,并且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
我认为这是因为我在NULL
getter和setter定义中将getter设置为sub_type
,但是我不知道如何仅为类型定义setter。这是否有可能,还是我必须通过分配与base_type
相同的方法来重新定义吸气剂?