お勉強2

ご飯食べたし、続きのお勉強
恥ずかしながらこれまでオブジェクト指向は知識はありつつちんぷんかんぷんだった。
使わないし〜
関係ないし〜
とスルーしていた。


でも、久しぶりに「みんなのPython」のオブジェクト指向の項を読んでいて、「何か分かるかも」って思った。
ざっくり読んで、オブジェクト指向のプログラムを書いてみたくなったのである。
先ほどの【スクリプトファイルに引数を渡す】はその前哨戦。

てなわけで、
オブジェクト指向プログラミング(継承・多態性ポリモーフィズム?だったっけ?))】

ファイル名:player.py

# -*- encoding : utf-8 -*-

class Player:
    def play(self):
        print


class FW(Player):
    def play(self):
        print u"シュート!"


class MF(Player):
    def play(self):
        print u"パス!"


class DF(Player):
    def play(self):
        print u"カット!"


class GK(Player):
    def play(self):
        print u"セーブ!"


class Practice:
    def start(self, position):
        if position == u"FW":
            return FW()
        elif position == u"MF":
            return MF()
        elif position == u"DF":
            return DF()
        elif position == u"GK":
            return GK()
        else:
            print u"そんなポジションはありません"
            sys.exit()


ファイル名:soccer.py

# -*- encoding : uft-8 -*-

from player import Practice
import sys

soccer_player = Practice().start(sys.argv[1])

soccer_player.play()

これで

C:\practice\Python\2-2>python soccer.py FW
シュート!

C:\practice\Python\2-2>python soccer.py MW
そんなポジションはありません

C:\practice\Python\2-2>python soccer.py MF
パス!

C:\practice\Python\2-2>python soccer.py DF
カット!

C:\practice\Python\2-2>python soccer.py GK
セーブ!

やたね。
ちょっとPython面白くなってきたかも。
selfが若干書くのめんどくさいけどもね。

ちょっと驚いたのが

soccer_player = Practice().start(sys.argv[1])

って書けたこと。
こうやってクラスをインスタンス化しなくてもメソッドで呼び出せるんや!
これがオブジェクト指向言語一般的に当たり前なことなのか、Python特有のものなのか調査中。

追記

Rubyではできるみたいですね。
どうやらこれは一般的な話っぽいね。


Pythonに詳しい人助言ください〜