モジュールのコードはいつ実行される?
正規表現のコードを書いていて、正規表現のコンパイルっていつすべき?と思ったのでエントリー。
テストコード
こんなモジュールを書いてみる。
#!/usr/bin/env python # -*- coding: utf-8 -*- # file: mylib print 'global.' class A(object): print 'in class A.' def __init__(self): print 'in class A constructor.' class B(object): print 'in class B.' def __init__(self): print 'in class B constructor.'
で、モジュールをimportするコード。
#!/usr/bin/env python # -*- coding: utf-8 -*- print 'before import.' from mylib import A print 'after import.' if __name__ == '__main__': a = A()
結果
before import. global. in class A. in class B. after import. in class A constructor.
グローバルに書いたものが実行されるのは納得。
A しか import しなくても B のクラスの中も import 時に実行されるのね。
しょっちゅうオブジェクトを作って壊してって使い方なら、class の中でいいかも。