Pythonのお勉強。
今日はメタプログラムのために利用できる事柄から。
メタプログラムとは?
プログラムの上位にあるプログラムのこと。
ここでは他のモジュールを管理・操作するプログラム、
プログラムがプログラムを調べてそれを操作する(イントロスペクション)
ようなプログラムの作成に利用できる事柄をやる。
Cで言うところのlibbfdあたりを使ってがんばるプログラム?JavaだとMethodあたり?な感じか。
Pythonでやってみる
まず、操作対象のモジュールを作る。
$ cat abc.py
X = [1,2,3,4,5]
def func(x):
print x
とりあえず、こんなモジュールを用意。
で、やってみる。
最初は__dict__というビルトインディクショナリを使用して属性にアクセス。
$ python
Python 2.4.4 (#2, Apr 5 2007, 20:11:18)
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import abc
>>> abc.__dict__['X']
[1, 2, 3, 4, 5]
>>> abc.__dict__['func'](10)
10
>>>
ふむふむ。
次は、sys.modulesを使用してアクセス。
>>> import sys
>>> sys.modules['abc'].X
[1, 2, 3, 4, 5]
>>> sys.modules['abc'].func(10)
10
>>>
なるほど。
で、次はビルトイン関数を利用する方法。
>>> getattr(abc, 'X')
[1, 2, 3, 4, 5]
>>> getattr(abc, 'func')(10)
10
>>>
ふーん。
おしまい。
.
0 コメント:
コメントを投稿