Python扩展类型可以从其基本类型中仅继承getter或setter吗?

时间:2019-05-28 20:40:57

标签: python c inheritance python-extensions

我有一个基本类型,我将称之为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时,所有三个字段仍然存在,并且field2field3仍与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相同的方法来重新定义吸气剂?

0 个答案:

没有答案