使用pythoncapi,如何找到Union类型?

2024-06-12 10:01:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个新的Union[int,str]类型

我想拥有对实例Union_Type的访问权限,以创建一个类似Union[int,str]的新类型

PyType_Type是公共的,所以我可以写

(PyObject*)&PyType_Type

但是Union_Type不是公共的,所以我不能写

(PyObject*)&Union_Type

我可以添加我的C代码吗

PyAPI_DATA(PyTypeObject) UnionType_Type;

代码示例:

PyObject *newUnion=PyObject_GetItem(&UnionType_Type,
    PyTuple_Pack(2,&PyLong_Type,&PyUnicode_Type));

我想要一个PyObject*to联合类型来调用__getitem__()并创建一个新的子类型


Tags: 实例代码权限示例类型datatypeint
2条回答

解决方案:

PyObject* typing = PyImport_ImportModule("typing")
PyObject* unionType = PyObject_GetAttrString(typing,"Union");
PyObject* tuple = PyTuple_Pack(2,&PyLong_Type,&PyUnicode_Type)
PyObject *newUnion=PyObject_GetItem(unionType,tuple);
Py_DECREF(typing);
Py_DECREF(unionType);
Py_DECREF(unionType);
Py_DECREF(tuple);

这不是不公开的问题Union_Type不存在typing.Union不是通过C级全局变量定义的;它是通过typing模块中的class语句定义的

如果您想通过C API访问typing.Union,您必须执行与Python级别完全相同的操作:module对象的importtypingaccess the ^{} attribute。除了少数例外,这与您在C级访问任何可导入模块的内容时应该使用的过程相同

相关问题 更多 >