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) と言う、本来組み込み型のインスタンスを生成する書き方を使用してしまっているから。

type.def というクラスメソッドにしてしまうのも考えたけど、上記同様の理由からそぐわないと感じました。

isinstance と checktype なら、名称のコンビ感もいい。動詞名詞になる。初学者には isinstance と type よりも isinstance と checktype の方が、分かりやすいのではないだろうか。自分だけかな。

でも後ろ髪を引かれるのは...

でも型判定は頻繁に使うのに対して、クラスを動的に生成することはまずない。よく使うものには短い関数名を当てた方が良いから、ちょっと強引だけど引数で場合分けしてしまうというのも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