1. ホーム 
  2. 備忘録 
  3. Python

ダックタイピング

ダックタイピング

あるオブジェクトが正しいインターフェースを持っているかを決定するのにオブジェクトの型を見ないプログラミングスタイル

代わりに、単純にオブジェクトのメソッドや属性が呼ばれたり使われたりする

「アヒルのように見えて、アヒルのように鳴けば、それはアヒルである。」

ダックタイピングは 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文が多用されるのが特徴的である


    参考文献

  1. Python : duck typing(ダックタイピング) とは
  2. Python公式ドキュメント duck-typing