Python の type 関数について思ったこと

主張
型判定の関数名は、次の2つの理由から checktype(object) とかにしてほしかったな..(setattr 関数みたいな感じで)。

理由
UNIX の哲学に反しているから

2. Make each program do one thing well.
2. 1つのプログラムには1つのことをうまくやらせる
UNIXという考え方 The UNIX philosophy

type 関数は引数の個数によって2つの異なる動作をします。

type(object)
型を判定

type(class_name, parent_classes, attribute_dict)
型を生成

1つ目の理由は、受け取る取る引数によって2つの異なる動作のは辞めてほしい。Python は引数によるオーバーロードなんてしてくれないから、重複してしまった時は関数名で分けてしまうのが望ましい気がする。

2つ目の理由は type(object) と言う書き方で型判定をするのは、違和感がある。なぜなら型判定の時は何も新しいインスタンスオブジェクトを生成しているわけではないのに ClassName(parameter) と言う、本来インスタンスを生成する構文を使用しているから...(__call__ という属性はありますが..)

immutable なクラスのオブジェクトをインスタンス化する時なら、新しいオブジェクト生成されないけど。一方で type はクラスオブジェクトだから、type(class_name, parent_classes, attribute_dict) としてインスタンス生成でいい。

でも型判定は頻繁に使うのに対して、クラスを動的に生成することはまずないから、ちょっと強引だけど引数で場合分けしてしまうというのも1つの解なのかもしれない。

Special cases aren't special enough to break the rules.
特殊なケースと言うは、ルールを破るほど特殊ではない。
Although practicality beats purity.
それでも実用性は、一貫性に勝るが。
PEP 20 -- The Zen of Python

ところで、動的に継承クラスを作るために、type組み込み関数を使ったのですが、こいつは曲者です。 オブジェクトが渡されたときは生成元のクラスを返す一方で、 クラス名の文字列と継承元クラスが渡されたときは、継承させたクラスを返すのです。 なぜ、このような全く違う機能を一つの組み込み関数に持たせたのか意味がわかりません。
https://shigekikarita.github.io/blog/2017/02/16/021.html