型オブジェクト
**************

PyTypeObject

   組み込み型を記述する際に用いられる、オブジェクトを表す C 構造体です
   。

PyObject* PyType_Type

   型オブジェクト自身の型オブジェクトです; Python レイヤにおける
   "type" と同じオブジェクトです。

int PyType_Check(PyObject *o)

   オブジェクト *o* が型オブジェクトの場合に真を返します。標準型オブジ
   ェクトから派生したサブタイプのインスタンスも含みます。その他の場合
   には偽を返します。

int PyType_CheckExact(PyObject *o)

   オブジェクト *o* が型オブジェクトの場合に真を返します。標準型のサブ
   タイプの場合は含みません。その他の場合には偽を返します。

unsigned int PyType_ClearCache()

   内部の検索キャッシュをクリアします。現在のバージョンタグを返します
   。

unsigned long PyType_GetFlags(PyTypeObject* type)

   *type* のメンバーである "tp_flags" を返します。この関数は基本的に
   *Py_LIMITED_API* を定義して使うことを想定しています。それぞれのフラ
   グはpythonの異なるリリースで安定していることが保証されていますが、
   "tp_flags" 自体は限定されたAPIの一部ではありません。

   バージョン 3.2 で追加.

   バージョン 3.4 で変更: 返り値の型が "long" ではなく "unsigned long"
   になりました。

void PyType_Modified(PyTypeObject *type)

   内部の検索キャッシュを、その type とすべてのサブタイプに対して無効
   にします。この関数は type の属性や基底クラス列を変更したあとに手動
   で呼び出さなければなりません。

int PyType_HasFeature(PyTypeObject *o, int feature)

   型オブジェクト *o* に、型機能 *feature* が設定されている場合に真を
   返します。型機能は各々単一ビットのフラグで表されます。

int PyType_IS_GC(PyTypeObject *o)

   型オブジェクトが *o* が循環参照検出をサポートしている場合に真を返し
   ます; この関数は型機能フラグ "Py_TPFLAGS_HAVE_GC" の設定状態をチェ
   ックします。

int PyType_IsSubtype(PyTypeObject *a, PyTypeObject *b)

   *a* が *b* のサブタイプの場合に真を返します。

   この関数は実際のサブクラスをチェックするだけです。つまり、
   "__subclasscheck__()" は *b* に対し呼ばれません。 "issubclass()" と
   同じチェックをするには "PyObject_IsSubclass()" を呼んでください。

PyObject* PyType_GenericAlloc(PyTypeObject *type, Py_ssize_t nitems)
    *Return value: New reference.*

   型オブジェクトの "tp_alloc" に対するジェネリックハンドラです。
   Python のデフォルトのメモリアロケートメカニズムを使って新しいインス
   タンスをアロケートし、すべての内容を "NULL" で初期化します。

PyObject* PyType_GenericNew(PyTypeObject *type, PyObject *args, PyObject *kwds)
    *Return value: New reference.*

   型オブジェクトの "tp_new" に対するジェネリックハンドラです。型の
   "tp_alloc" スロットを使って新しいインスタンスを作成します。

int PyType_Ready(PyTypeObject *type)

   型オブジェクトのファイナライズを行います。この関数は全てのオブジェ
   クトで初期化を完了するために呼び出されなくてはなりません。この関数
   は、基底クラス型から継承したスロットを型オブジェクトに追加する役割
   があります。成功した場合には "0" を返し、エラーの場合には "-1" を返
   して例外情報を設定します。

void* PyType_GetSlot(PyTypeObject *type, int slot)

   与えられたスロットに格納されている関数ポインタを返します。返り値が
   "NULL" の場合は、スロットが "NULL" か、関数が不正な引数で呼ばれたこ
   とを示します。通常、呼び出し側は返り値のポインタを適切な関数型にキ
   ャストします。

   See "PyType_Slot.slot" for possible values of the *slot* argument.

   An exception is raised if *type* is not a heap type.

   バージョン 3.4 で追加.


Creating Heap-Allocated Types
=============================

The following functions and structs are used to create heap types.

PyObject* PyType_FromSpecWithBases(PyType_Spec *spec, PyObject *bases)
    *Return value: New reference.*

   Creates and returns a heap type object from the *spec*
   ("Py_TPFLAGS_HEAPTYPE").

   If *bases* is a tuple, the created heap type contains all types
   contained in it as base types.

   If *bases* is "NULL", the *Py_tp_bases* slot is used instead. If
   that also is "NULL", the *Py_tp_base* slot is used instead. If that
   also is "NULL", the new type derives from "object".

   This function calls "PyType_Ready()" on the new type.

   バージョン 3.3 で追加.

PyObject* PyType_FromSpec(PyType_Spec *spec)
    *Return value: New reference.*

   Equivalent to "PyType_FromSpecWithBases(spec, NULL)".

PyType_Spec

   Structure defining a type's behavior.

   const char* PyType_Spec.name

      Name of the type, used to set "PyTypeObject.tp_name".

   int PyType_Spec.basicsize

   int PyType_Spec.itemsize

      Size of the instance in bytes, used to set
      "PyTypeObject.tp_basicsize" and "PyTypeObject.tp_itemsize".

   int PyType_Spec.flags

      Type flags, used to set "PyTypeObject.tp_flags".

      If the "Py_TPFLAGS_HEAPTYPE" flag is not set,
      "PyType_FromSpecWithBases()" sets it automatically.

   PyType_Slot *PyType_Spec.slots

      Array of "PyType_Slot" structures. Terminated by the special
      slot value "{0, NULL}".

PyType_Slot

   Structure defining optional functionality of a type, containing a
   slot ID and a value pointer.

   int PyType_Slot.slot

      A slot ID.

      Slot IDs are named like the field names of the structures
      "PyTypeObject", "PyNumberMethods", "PySequenceMethods",
      "PyMappingMethods" and "PyAsyncMethods" with an added "Py_"
      prefix. For example, use:

      * "Py_tp_dealloc" to set "PyTypeObject.tp_dealloc"

      * "Py_nb_add" to set "PyNumberMethods.nb_add"

      * "Py_sq_length" to set "PySequenceMethods.sq_length"

      The following fields cannot be set using "PyType_Spec" and
      "PyType_Slot":

      * "tp_dict"

      * "tp_mro"

      * "tp_cache"

      * "tp_subclasses"

      * "tp_weaklist"

      * "tp_print"

      * "tp_weaklistoffset"

      * "tp_dictoffset"

      * "bf_getbuffer"

      * "bf_releasebuffer"

      Setting "Py_tp_bases" or "Py_tp_base" may be problematic on some
      platforms. To avoid issues, use the *bases* argument of
      "PyType_FromSpecWithBases()" instead.

   void *PyType_Slot.pfunc

      The desired value of the slot. In most cases, this is a pointer
      to a function.

      May not be "NULL".
