それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

モジュールと名前空間とclassのImport

Pythonには標準モジュールがある。使い方は一般的。

#Simple XML-RPC Serverの例
import xmlrpclib
from xmlrpclib
import Fault
import SocketServer
import BaseHTTPServer
import sys
import os

ここでのポイントはfrom。FROMを使うとローカルの名前空間にロードされる。

from xmlrpclib
import Fault

def xmlrpclib() :
    """...

とかくと上書きしてしまうので注意。


インポートされるライブラリパスは、環境変数に依存する。

カレントディレクトリ->PYTHONPATH(PATH書式)->インストールパス

ファイル名が、モジュール名になり、Pythonでの名前空間を表す。

#hoge.py
def foo():
   print "foo"
#sample.py
import hoge
hoge.foo()

ファイル名の代わりにディレクトリを使えば、名前空間をネストできる。

クラスに関しても同じようにインポートする。ただし、Javaのような「クラス名=モジュール名」の対応が100%成立すると限らない。

一方で、PHPのように、適当なファイル名でモジュールを作成する、いい加減さでうまくいくようなモノでもない。
Perlの use strict;をイメージするとよいかな。

PHPでのインポート

<?php
require_once "Smarty.class.php";
require_once "Zend.php";

$smarty = new Smarty;
$zend   = new Zend;
  • ファイル名とクラス名が一致しなく、銘々規則はいい加減でいい。手軽に使えるので便利
  • 一方で、大人数で開発するときに、似た名前のファイルが増殖し、頭を抱える原因になる。

JavaScriptの場合、確固たる手法はない。

<script type="text/javascript" src="./js.cgi?type=initA&user=B" >
</script>

<script type="text/javascript">

document.write("<script...");//Scriptタグを書き出す
eval( xmlHttpResult );//xmlHttpの結果をevalする
</script>
  • scriptタグの利用
    • リクエスト毎に異なるJSファイルを動的生成
    • document.writeを利用
  • evalの利用
    • xmlhttpやiframeの利用
      • JSON形式
      • JSONP形式 getXXX( ); などがある。
    • document.onload()にBindする。