類(lèi)型注解對象?

提供幾種用于類(lèi)型提示的內置類(lèi)型。 目前存在兩種類(lèi)型 -- GenericAliasUnion。 只有 GenericAlias 會(huì )向 C 開(kāi)放。

PyObject *Py_GenericAlias(PyObject *origin, PyObject *args)?
Part of the Stable ABI since version 3.9.

創(chuàng )建一個(gè) GenericAlias 對象。相當于調用 Python 類(lèi) types.GenericAlias 。參數 originargs 分別設置 GenericAlias's __origin__ 屬性和 __args__ 屬性。 origin 應該是 PyTypeObject* 類(lèi)型, args 可以是 PyTupleObject* 類(lèi)型或者任意 PyObject* 類(lèi)型。如果傳遞的 args 不是一個(gè)元組,則自動(dòng)構建一個(gè) 1 元元組,并將 __args__ 設置為 (args,) 。對參數進(jìn)行了最小限度的檢查,因此即使 origin 不是類(lèi)型,函數也會(huì )成功。GenericAlias__parameters__ 屬性是通過(guò) __args__ 懶加載的。如果失敗,則觸發(fā)異常并返回 NULL 。

下面是一個(gè)如何創(chuàng )建一個(gè)擴展類(lèi)型泛型的例子:

...
static PyMethodDef my_obj_methods[] = {
    // Other methods.
    ...
    {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, "See PEP 585"}
    ...
}

參見(jiàn)

數據模型的方法 __class_getitem__() 。

3.9 新版功能.

PyTypeObject Py_GenericAliasType?
Part of the Stable ABI since version 3.9.

Py_GenericAlias() 所返回的對象的 C 類(lèi)型。等價(jià)于 Python 中的 types.GenericAlias 。

3.9 新版功能.