パッケージについて
Pythonにはパッケージって概念あるよね。ただコード上で明示的にパッケージの宣言はしていないと思う。Perlなら「package」と明記するんだがPythonは処理系が自動的にパッケージを認識してくれるの?
# TestClass.py class happyMonday(): pass class badTuesday(): pass def dayToHappy(): pass def __test(): pass if __name__ == '__main__': __test()
ちょっと上記のようなクラスを作ってみた。
>>> import TestClass >>> TestClass <module 'TestClass' from 'TestClass.py'> >>> from TestClass import happyMonday >>> happyMonday <class TestClass.happyMonday at 0x00AEDDB0> >>> from TestClass import dayToHappy <function dayToHappy at 0x00AF6B70> >>> from TestClass import __test >>> __test <function __test at 0x00AF6C30> >>> __test()
面白いね。ファイルごとにパッケージ管理を行っているイメージなのかな?クラスはわかるが、ファンクションを「import」できるのには新しい発見だ。あと「__test」がcallできちゃうんだね。なんで?そんなもの?まあいいや。
凄く面白いなと思ったのは、ディレクトリの中に「__init__.py」を作ると、ディレクトリをインポートできるんですね。面白いです。そのパッケージをインポートする際に必要なモジュール、変数を設定したりするのかな?まだ、使いどころがわからないが、少し驚いた。
「./test」を作って、その直下に空ファイル「__init__.py」を作成。
>>> import test >>> test <function test at 0x00AF6BB0> >>> t = test() >>> t <module 'test' from 'test\__init__.py'> >>>
「import test」をやる事によって、そのディレクトリ配下の「__init__.py」を見に行くんだね。この事により階層構造を容易に作成できインポートも簡単に行えるわけだって本当か!ディレクトリ配下に「__init__.py」が存在しなければ、ただのディレクトリに過ぎないので「import」は行えない。
>>> import ss Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named ss
ちなみに、「import test」とやると、標準モジュールに「test」が存在し、そっちを見に行くので注意かな。では