正確な意味は、時間の経過とともにわずかに変化しています。最新バージョンの python (python 3) が最もシンプルで一貫性があるので、それについて説明します。
値とそれらの値の型の 2 種類があるという考えから始めましょう。
Python の値は、たとえば、数値、リスト、さらには関数にすることができます。
値のタイプはそれらを説明します。int
たとえば、数値のタイプは次のようになります。
これまでのところ、言語に「組み込まれている」ものだけを考えてきました。しかし、独自のものを定義することもできます。そのためには、新しいクラスを定義します。関数は、type()
クラスのインスタンスの型がクラス自体であることを (python 3 で) 言います。
したがって、MyFoo というクラスを定義するとします。
>>> class MyFoo:
>>> def __init__(self, a):
>>> self.a = a
>>>
>>> foo = MyFoo(1)
>>> type(foo)
<class '__main__.MyFoo'>
それを整数と比較します。
>>> type(1)
<class 'int'>
値の型がそのクラスであることは明らかです。
そのため、Python の値 (数値、リスト、関数など) はすべてクラスのインスタンスです。値の型は、その動作を記述するクラスです。
値に型を割り当てることもできるため、事態はさらに複雑になります! 次に、タイプの値があります。
>>> x = type(1)
>>> type(x)
<class 'type'>
任意の型の型が であることがわかりtype
ます。これは、クラス自体が (のtype
) インスタンスであることを意味します。これは少し奇妙です。しかし、それは一貫しており、通常は心配する必要はありません。
つまり、要約すると、python 3 (最も単純な) の場合:
- すべての値には型があります
- タイプは、値がどのように機能するかを説明します
- 型はクラスです
- クラスのインスタンスの型はそのクラスです
- 数値、リスト、関数、ユーザー定義オブジェクトはすべてクラスのインスタンスです
- クラスでさえクラスのインスタンスです!それらは
type
!のインスタンスです。
最後に、正確な質問に答えてみてください。一部の人々は、クラスのデータ型とインスタンスのデータ構造を呼び出します (私は思います)。それはごちゃごちゃしていて紛らわしく、人々はあまり注意を払っていません。クラスと型 (実際には同じものです) とインスタンスに固執するのが最も簡単です。