# 类型注解对象

Python 提供了多种内置类型用于类型注解，但只有 GenericAlias 暴露给了 C。

PyObject* `Py_GenericAlias`(PyObject *origin, PyObject *args)

  创建一个 GenericAlias 对象。相当于调用 Python 类 `types.GenericAlias` 。参数 origin 和 args 分别设置 `GenericAlias`'s `__origin__` 属性和 `__args__` 属性。 origin 应该是 `PyTypeObject*` 类型， args 可以是 `PyTupleObject*` 类型或者任意 `PyObject*` 类型。如果传递的 args 不是一个元组，则自动构建一个 1 元元组，并将 `__args__` 设置为 `(args,)` 。对参数进行了最小限度的检查，因此即使 origin 不是类型，函数也会成功。`GenericAlias` 的 `__parameters__` 属性是通过 `__args__` 懒加载的。如果失败，则触发异常并返回 `NULL` 。

  下面是一个如何创建一个扩展类型泛型的例子:

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

  参见

  数据模型的方法 `__class_getitem__()` 。

  3.9 新版功能.

PyTypeObject `Py_GenericAliasType`

  由 `Py_GenericAlias()` 所返回的对象的 C 类型。等价于 Python 中的 `types.GenericAlias` 。

  3.9 新版功能.