# 15 `types` -- 組み込み型の名前

このモジュールは標準のPythonインタプリタで使われているオブジェクト の型について、名前を定義しています(拡張モジュールで定義されている型を除 く)。このモジュールは`listiterator`型のようなプロセス中に例外 をふくまないので、"`from types import *`"のように使っても安全です。このモジュールの 将来のバージョンで追加される名前は、"`Type`"で終わる予定です。

関数での典型的な利用方法は、以下のように引数の型によって異なる動作をする 場合です:

    from types import *
    def delete(mylist, item):
        if type(item) is IntType:
           del mylist[item]
        else:
           mylist.remove(item)

Python 2.2以降では、`int()` や `str()`のような ファクトリ関数は、型の名前となりましたので、`types`を使用する 必要はなくなりました。上記のサンプルは、以下のように記述する事が 推奨されています。

    def delete(mylist, item):
        if isinstance(item, int):
           del mylist[item]
        else:
           mylist.remove(item)

このモジュールは以下の名前を定義しています。

`NoneType`
  `None`の型です。

`TypeType`
  typeオブジェクトの型です (`type()`などによって返 されます)。

`BooleanType`
  `bool`の`True`と`False`の型です。これは組み込み関数の `bool()`のエイリアスです。

`IntType`
  整数の型です(e.g. `1`)。

`LongType`
  長整数の型です(e.g. `1L`)。

`FloatType`
  浮動小数点数の型です(e.g. `1.0`)。

`ComplexType`
  複素数の型です(e.g. `1.0j`)。 Pythonが複素数のサポートなしでコンパイルされていた場合には 定義されません。

`StringType`
  文字列の型です(e.g. `'Spam'`)。

`UnicodeType`
  Unicode文字列の型です(e.g. `u'Spam'`)。 Pythonがユニコードのサポートなしでコンパイルされていた場合には 定義されません。

`TupleType`
  タプルの型です(e.g. `(1, 2, 3, 'Spam')`)。

`ListType`
  リストの型です(e.g. `[0, 1, 2, 3]`)。

`DictType`
  辞書の型です(e.g. `{'Bacon': 1, 'Ham': 0}`)。

`DictionaryType`
  `DictType`の別名です。

`FunctionType`
  ユーザー定義の関数またはlambdaの型です。

`LambdaType`
  `FunctionType`の別名です。

`GeneratorType`
  ジェネレータ関数の呼び出しによって生成されたイテレータオブジェクトの型で す。 バージョン 2.2 で 新たに追加 された仕様です。

`CodeType`
  `compile()`関数などによって返されるコード オブジェクトの型です。

`ClassType`
  ユーザー定義のクラスの型です。

`InstanceType`
  ユーザー定義のクラスのインスタンスの型です。

`MethodType`
  ユーザー定義のクラスのインスタンスのメソッドの型です。

`UnboundMethodType`
  `MethodType`の別名です。

`BuiltinFunctionType`
  `len()` や `sys.exit()`のような組み込み関数の型です。

`BuiltinMethodType`
  `BuiltinFunction`の別名です。

`ModuleType`
  モジュールの型です。

`FileType`
  `sys.stdout`のようなopenされたファイルオブジェクトの型です。

`XRangeType`
  `xrange()`関数によって返されるrangeオブジェ クトの型です。

`SliceType`
  `slice()`関数によって返されるオブジェクトの 型です。

`EllipsisType`
  `Ellipsis`の型です。

`TracebackType`
  `sys.exc_traceback`に含まれるようなトレースバックオブジェクトの型です。

`FrameType`
  フレームオブジェクトの型です。 トレースバックオブジェクト`tb`の`tb.tb_frame`などです。

`BufferType`
  `buffer()`関数によって作られるバッファオブ ジェクトの型です。

`DictProxyType`
  `TypeType.__dict__` のような dictへのプロキシ型です。

`NotImplementedType`
  `NotImplemented`の型です。

`GetSetDescriptorType`
  `FrameType.f_locals` や `array.array.typecode` のような `PyGetSetDef` のある 拡張モジュールで定義されたオブジェクトの型です。 この定数は上のような拡張型がないPythonでは定義されません。 ポータブルなコードでは`hasattr(types, 'GetSetDescriptorType')`を 使用してください。 バージョン 2.5 で 新たに追加 された仕様です。

`MemberDescriptorType`
  `datetime.timedelta.days` のような `PyMemberDef`のある 拡張モジュールで定義されたオブジェクトの型です。 この定数は上のような拡張型がないPythonでは定義されません。 ポータブルなコードでは`hasattr(types, 'MemberDescriptorType')`を 使用してください。 バージョン 2.5 で 新たに追加 された仕様です。

`StringTypes`
  文字列型のチェックを簡単にするための`StringType`と `UnicodeType`を含むシーケンスです。 `UnicodeType`は実行中の版のPythonに含まれている場合にだけ含まれるの で、2つの文字列型のシーケンスを使うよりこれを使う方が移植性が高くなります。 例: `isinstance(s, types.StringTypes)`. バージョン 2.2 で 新たに追加 された仕様です。