型についてのあれこれ(2) - 数値型と型のクラス階層

【 目次 】

数値型

  • 3.1.1. 数
  • 5.4. 数値型 int, float, long, complex

    4 つの異なる数値型があります: 通常の整数型, 長整数型, 浮動小数点型, 複素数型 です。さらに、真偽値(Boolean)型も通常の整数型のサブタイプです。通常の整数 (単に 整数型 とも呼ばれます) は C言語の long 型を使って実装されており、少なくとも 32 ビットの精度があります (sys.maxint は常に通常の整数の各プラットフォームにおける最大値にセットされており、最小値は -sys.maxint - 1 になります)。長整数型には精度の制限がありません。浮動小数点型はたいていは C の double を使って実装されています;

型のクラス階層とABC(abstract base class)

それぞれの型は階層構造で定義されていて、数値型であれば、numbersモジュールのNumberクラスを基底クラスとして、このクラスを継承したクラスとなっている。
Numberクラス自体は抽象クラスとなっておりインスタンス化できない。
従って、実際にはこれを継承したクラスを利用して型を使う事になる。

数値型のクラス階層(多分、こんなふうなイメージ)

numbers.Number
    numbers.Integral (整数)
        (通常の) 整数型 (plain integer)
            int
        長整数型 (long integer)
            long
        ブール型 (boolean)
            bool
    numbers.Real (float) (実数)
        float
    numbers.Complex (複素数)
        complex

Python 3.0開発者ガイド:数値、文字列、データ - インターネットコム

Python 3.0では、numbersというモジュールが導入されました(Python 2.6にもあります)。このモジュールには、各数値型の抽象ベースクラス(ABC)が含まれています。これによって実質的に数値型の階層が形成され、各数値型は上位の数値型クラスのサブクラスになります。
...
Complex、Real、IntegralのABCは、それぞれcomplex型、float型、int型によって実装されています。

ABC(abstract base class)とは抽象基底クラスの事を言うらしい。
numbers.Integralは抽象クラスなのでインスタンス化できない。
これを継承したクラスがintクラスであってインスタンス化できるので実際に使われるクラスはintクラスという事になる。

numbers.Integralはintクラス,longクラス,boolクラスの抽象ベースクラス、
numbers.Realはfloatクラスの抽象ベースクラス、
numbers.Complexはcomplexの抽象ベースクラス
という位置づけなのだろうか

結局、実際に使われる基本的な数値型としてはint, float, long, complex,boolの5種類という事になる。

数値型の操作

数値型の範囲

int型

整数をあらわすには他の言語でもおなじみのint、
値の範囲は-sys.maxint-1からsys.maxint

最低でも符号付32ビットの整数という事になる。
組込み関数int(というかintクラスのコンストラクタというか)を使って基数を指定してint型の値を指定できる。

以下は2進数文字列を使ってint型の数値を生成する例。

a=int("10001010",2)
print a

実行結果

138

long型

intと同じく整数だが、なんと値の範囲に制限が無い。
末尾にLを付けてint型と区別する。
組み込み関数longを使って生成することもできる。

python3ではlong型は廃止。

bool型

boolは以外と思うかもしれないがint型のサブクラスという位置付けである。
Falseは0,Trueは1という整数値、
int型のうち、0と1しかとらない整数という事。
組み込み関数boolを使って生成することもできる。

float型

同じみの浮動小数点をあらわすfloat。
floatがあるならdoubleが存在するのかと思ったがpythonにはdoubleは無いみたい。
他の言語でのdoubleがpythonではfloatになるみたい。
単制度,倍制度の区別がなく浮動小数点は一律、倍制度のfloatを使うという事か。
組み込み関数floatを使って生成することもできる。

complex型

複素数をあらわすcomplex型も組込み型として定義されている。
組み込み関数complexを使って生成することもできる。

サンプルコードは

cmathモジュールという複素数のための数学関数を集めたモジュールが用意されている。

decimalモジュール

組込み型では無いがdecimalという10進の浮動小数点算術をサポートするモジュールがあり、Decimalという型(クラス)が定義されていて大きな数値,精度の高い数値を扱う

数値型を利用するのに便利なモジュール

mathモジュール等の数値型を利用するのに便利なモジュールが標準で用意されている。

ページのトップへ戻る