メモ代わり。てきとーに。 いや、ですからてきとーですって。 2年前ぐらいにPythonあたりでメールくれた方、ごめんなさい。メール紛失してしまい無視した形になってしまいました。。。

2008年2月19日火曜日

[Python][お勉強] Python入門(42) - メタプログラムのために

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 コメント: