概要
Pythonを1、2年ながめているが、ダックタイピングが頭に入っていない。
理解する手段を考えた。
余談ですが、
頭に入っていないのは、ワタシが使っている教科書のせいかも。
ちょっと、ディスった記事↓。
良書『入門 Python3』、説明に失敗しているところN選(N=3)。
理解する手段
簡単です。2手順です。
手順1、自分がダックタイピングだとおもっている例のコードを書いてみる。
以下、ワタシが書いたコード。点数にマイナスをつけていいなら、-60(マイナス60点)。
セールスポイント、
- 何を思ったか。。。継承させている。
なぜ、こんなコードを書いてしまったか。
それは、ダックタイピングは、なんの特徴もない、あたり前のものと記憶していたから。
class Tori():#鳥
def tobe(self):
print("bata-bata")
def nake(self):
print("ga-ga")
class Duck(Tori):#ダック
def nake(self):
print("ga-ga-ga-ga-ga-ga")
class Ahiru(Tori):#アヒル
def tobe(self):
print("bata-bata-bata-bata-bata")
duck_1go = Duck()
duck_1go.nake()
duck_1go.tobe()
ahiru_1go = Ahiru()
ahiru_1go.nake()
ahiru_1go.tobe()
手順2、正解を調べる。
よくわからなかったので、wikiに正解を求めました。
wikiにrubyのコード例がありました。
pythonに書き直してみました。
def test(foo):
foo.sound()
class Duck():
def sound(self):
print('quack')
class Cat():
def sound(self):
print('myaa')
duck_san = Duck()
cat_san = Cat()
test(duck_san)
test(cat_san)
wikiでのコードに対する補足説明は、以下の1行です。
2つのクラスに継承の関係が無いことに注目して欲しい。
まとめ
教科書を読むだけでは、頭に入りませんね。
コメントなどあれば、お願いします。
本来、このダックタイピングが成立している背景とか作用に意味があるのでしょうが、そのあたりは、また、理解が深まってから。。。