ダックタイピング
ダックタイピング ▲
あるオブジェクトが正しいインターフェースを持っているかを決定するのにオブジェクトの型を見ないプログラミングスタイル
代わりに、単純にオブジェクトのメソッドや属性が呼ばれたり使われたりする
「アヒルのように見えて、アヒルのように鳴けば、それはアヒルである。」
ダックタイピングは type() や isinstance() による判定を避ける
その代わり、典型的に hasattr() 判定や EAFP プログラミングを利用する
hasattr(object, name) ▲
引数はオブジェクトと文字列である
文字列がオブジェクトの属性名の一つである場合に True を返す、そうでない場合に False を返す
この関数は getattr(object, name) を呼び出して AttributeError を送出するかどうかを見ることで実装されている
EAFP と LBYL ▲
EAFPは「認可をとるより許しを請う方が容易 (easier to ask for forgiveness than permission、マーフィーの法則)」の略である
Python で広く使われているコーディングスタイルで、通常は有効なキーや属性が存在するものと仮定し、その仮定が誤っていた場合に例外を補足する
この簡潔で手早くかけるコーディングスタイルには、try-except文が多用されるのが特徴である
LBYLは「ころばぬ先の杖 (look before you leap)」 の略である
このスタイルはC言語などでよく使われており、呼び出しや検索を行う前に、明示的に前提条件(precondition)判定を行う
EAFP アプローチとは対照的で、if文が多用されるのが特徴的である
目次