FC2ブログ

スポンサーサイト

-------- --:--:-- --

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【Python】動的ディスパッチと動的メソッド定義

2012-03-23 00:29:58 Fri

パイソニアな人にはもはや今更のことですが、JavaのReflectionみたいなことを。

まあ、先人の知恵を借りれば何も語ることはないのですが。

http://d.hatena.ne.jp/yuheiomori0718/20120116/1326715412
http://d.hatena.ne.jp/littlefive/20110419/1303210605

とりあえず咀嚼したことを。

■動的ディスパッチ



obj = "abc" # objはstrオブジェクトであるtype(obj)とかで

getattr(obj, 'upper')() # strクラスのupperメソッドを実行している



まあコメントそのままです。

■動的メソッド定義



colours = {"black": "000",
"red": "f00",
"green": "0f0",
"yellow": "ff0",
"blue": "00f",
"magenta": "f0f",
"cyan": "0ff",
"white": "fff"}

class MyString(str):
pass

for name, code in colours.iteritems():
def _in_colour(self, code=code): # 連想配列を繰り返してメソッドを定義し続ける。このstatementでcodeにデフォルト値を代入している
return '%s' % (code, self)
setattr(MyString, "in_" + name, _in_colour) # ここでMyString型にメソッドを動的に追加している。メソッド名は文字列。

print MyString("Hello, world!").in_blue() # 動的に拡張されたMyStringのメソッドを実行。



プロトタイプチェーンとか暗黙参照とか気にせずに言えばjavascriptのprototypeみたいなもんか。

オブジェクトに対してメソッドを動的に追加しているのではなく、クラスに対して追加している、っていう感じか。

いやー、どの言語もこういう文字列遊びって楽しいなー。

スポンサーサイト

⇒comment

Secret

名言集
全記事(数)表示
全タイトルを表示
ブログ内検索
Loading
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。