类型注解对象
************

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 新版功能.
