すべてのタイプはオブジェクトです。
str
を適用することができます。型オブジェクトにstr
を適用した結果は、ほんの一部の文字列にすぎません。たとえば、
>>> str(type(8))
"<class 'int'>"
>>> str(type(abs))
"<class 'builtin_function_or_method'>"
>>> str(type(lambda x: x + 1))
"<class 'function'>"
>>> str(type((1,2,3)))
"<class 'tuple'>"
>>> str(type(90.4))
"<class 'float'>"
str
を実装するように設計されている人は誰でも好きです。あなたのC
の例では、これらのほとんどが特定のパターンに従っています。
ここで、型はオブジェクトなので、変数に代入することができます。 割り当てられている変数は、適用時に表示される型名とは関係ありません。str
です。たとえば、整数型がの変数builtins
内に割り当てられたとします。ここではいくつかの例です:
>>> import builtins
>>> builtins.int
<class 'int'>
>>> int
<class 'int'>
>>> float
<class 'float'>
>>> complex
<class 'complex'>
>>> list
<class 'list'>
>>> import types
>>> types.FunctionType
<class 'function'>
>>> types.FunctionType == type(lambda x: x + 1)
True
私もこの
>>> integer = float
>>> type(3.2) == integer
True
を行うではなく行うことができます。
TL; DR:1つはタイプに割り当てられた変数で、もう1つはstr
の出力です。同じでなければならないというルールはありません。それらが異なるときは、型のデザイナーに尋ねなければなりません。
どのように関連付けることができるかに関しては、一般にはそうではありません。しかし、組み込み関数のほとんどは文字列出力と同じ名前になり、types
モジュールの型はCamelCaseの名前を大文字にしているようです。ユーザー定義型には、パッケージ名の前にクラス名が付いています。すべての場合にこの規則を遵守する必要があるかどうかはわかりません。