いろいろトラウマを持つ機械です。
> |<引用>
> | このような型の拡張方法はダック・タイピング(duck typing)と呼ばれる。
> | なお、この方法では型の安全性を静的にチェックできないため、ダック・タイ
> |ピングを用いたPythonプログラムは実行時に型エラー(多くの場合これは「メソ
> |ッドが定義されていない」というエラーとなって現れる)が発生する危険性があ
> |る。
> | したがって新しい型を設計する際には、Python プログラマは(Javaなどより
> |も)多少は注意深くなる必要がある。
> |</引用>
> |
> | 振る舞いが予想できないようなクラスは、素直に継承して拡張あるいは隠蔽す
> |ればよかろうに、なんでわざわざダックタイピング的特徴で新しいクラスを実装
> |せにゃならんのか、理解に苦しみます。
>
> なんか、あまりDuckTypingについて理解していない表現に見えます
> ね。というか日本語としてもいまいち。「このような型の拡張法」っ
> て拡張してないじゃん。
ご尤も。
多分、JavaScriptみたく、継承できない言語とごっちゃにしてるんじゃないかな、
と思ったりします。
> それにダックタイピングを使わなくても動的型言語で型エラーが実
> 行時に発生するのは当たり前だと思います。それは設計手法として
> のダックタイピングとは関係ないでしょう。
まぁ、そんなこんなで、この文章について「ここで書く話じゃないんじゃない?」
とアップしといたわけです。
一週間ほど見て反応が無かったら、編集しようかと思ってます。
> isinstanceを使ったらダックタイピングではありませんよ。
どうしても型にこだわる設計をしたければ、という話です。
まぁ、内臓が外からいじれる(笑)Pythonでも、隠そうと思えば(というか、使う
方がいちいち見る気がなければ)裏でイロイロできますし、その関係で「裏で色々
やってるから、素直に指定された型か、あるいはそのサブクラスを使ってね」と
書いておく(docstringとかで)のは、それはそれでいいんじゃないかと思います
(まぁ、使う人がどう思うかは別ですが……)
だから、isinstanceで引数をテストして、ひっかかればエラー/例外を出す、
なんてのも、方法論としてはアリだと思います。
ちなみに私は、面倒なのでそういうコトしませんけど☆(プロじゃないし)
/機械伯爵/