或阿呆のブログ

Pythonを好んで使っているプログラマです。Ruby,Perl,PowerShell,VBAなどでもたまに書いています。おバカなことが大好きです。

Pythonでダック・タイピング サンプルコードを書いてみた

ダック・タイピングとは

wikipedia:ダック・タイピングから引用

ダック・タイピング(duck typing)とは、SmalltalkPythonRubyなどのいくつかの動的型付けオブジェクト指向プログラミング言語に特徴的な型付けの作法のことである。それらの言語ではオブジェクト(変数の値)に何ができるかはオブジェクトそのものが決定する。つまり、オブジェクトがあるインタフェースのすべてのメソッドを持っているならば、たとえそのクラスがそのインタフェースを宣言的に実装していなくとも、オブジェクトはそのインタフェースを実行時に実装しているとみなせる、ということである。それはまた、同じインタフェースを実装するオブジェクト同士が、それぞれがどのような継承階層を持っているのかということと無関係に、相互に交換可能であるという意味でもある。

この用語の名前は「ダック・テスト」に由来する。

"If it walks like a duck and quacks like a duck, it must be a duck"

(もしもそれがアヒルのように歩き、アヒルのように鳴くのなら、それはアヒルである)

Pythonのサンプルコード

Rubyの例は前述のwikipediaで記載されていたので、Pythonのサンプルコードを書いてみた。あくまでも一例として。

Class DuckとClass Catを定義し、属性soundをそれぞれ設定する

>>> class Duck:
    def __init__(self):
...     self.sound = 'quack'    
>>> class Cat:
    def __init__(self):
...     self.sound = 'myaa'

test関数を定義

>>> def test(spam):
...     print spam.sound

testの引数に与えられたオブジェクトの属性soundを出力する

実行結果

>>> test(Duck())
quack
>>> test(Cat())
myaa

アヒルのように歩くかは定かではないが、アヒルのように鳴くのなら、それはアヒルである
ネコのように歩くかは定かではないが、ネコのように鳴くのなら、それはネコである