いや待ってよ。
obj.method()とfunc( obj1, obj2 )は、表記の問題でしかなく、意味は等価だって言ってるの、
わかるんだけど、必ずしもそうとは言い切れなくない?
センスがどうとかじゃなく、もっとほら。何か違うでしょ。

多くのOOPLは単一ディスパッチなので、、多態は、第一引数に基づいてのみ、行われる。
だから、第一引数だけ、「特別」なんだよ。
obj.method()とfunc( obj1, obj2 )の違いはそこなんだ。
前者は、メソッドがobjに関連づく。メソッドにとって、objは特別なもの。
後者は、関数はobj1とobj2を等価に扱う。obj1とobj2のどちらに属すると言うものでもない。
あくまでfuncが目的で、その道具として、引数にobjを取る。
そこらへんの思考形態の違い。

百歩譲っても、OOPはマルチメソッドじゃなきゃおかしいんだよ。
JavaとかC++とかはどうかしてる。
人間の思考形態を退化させる洗脳装置だよ。あまり関わるな。

単一ディスパッチなので、単一のオブジェクト/クラスにメソッドが関連付けられるから、
どうしても思考回路が物中心になる。だから、「オブジェクト指向」なんて言われる。

だいたい、第一引数だけ特別扱いすることに、何の整合性がある?
引数は、第一だろうが第二だろうが、等価に扱われるべきだろ。それが自然だろ?
不自然なことすると、どっか歪んできてやがては破綻する。しわ寄せが出来る。

ちなみに、C++やJavaが単一ディスパッチなのは、それが便利だからじゃないぞ。
単にパフォーマンス上の理由と、コンパイラ実装コストからの物だ。
基底クラスを使っての多態もそう。
要はそれが手っ取り早かったってだけ。
出来るなら、ダックタイピング+マルチメソッドの方が便利に決まってる。

ちなみに、慎重派のLISPer達は、CLOSでマルチメソッドにしてる。流石だな。