2016-05-16 11 views
0

私はそういう風に書かれたPythonモジュールを持っています。モジュールをインポートするとPythonクラスが作成されます

SomeClasses.py 
class A(): 
    def __init__(self): 
     print "Hi! A is instantiated!" 

class B(): 
    def __init__(self): 
     print "Hi! B is instantiated!" 


a = A() 

ファイルをインポートすると、クラスAが自動的にインスタンス化されます。

>>> import a 
Hi! A is instantiated! 

今、ほとんどの場合、これはまさに私が望む動作です。ただし、オーバーヘッドのためにインポート中にクラス全体を即座に作成したくない場合があります。 init()関数の作成を検討しました。

ただし、これは既存のコードのほとんどを破棄します。私は、既存のコードベースの多くを書き直すことを避けたい。誰もがクラスを作成しないようにインポート時にモジュールに指示する方法を提案することはできますか?

ところで、私はあなたがSomeClassesをリファクタリングし、別のモジュールにそれを最大限に動くことができるWindows 7の

+0

[ここ](http://stackoverflow.com/questions/419163/what-does-if-name-main-do)を参照してください。 –

+0

あなたは 'if __name__ == '__main __':'を探していますか?説明はこの答えにあります:http://stackoverflow.com/a/419986/1388292 –

+0

これは、__name__ == '__main __' 'チェックのケースではありません。通常のインポート時に初期化が行われるようにします。 – user2357112

答えて

2

でPython 2.7を実行しています:

# SomeClasses.py 

# One of the few legitimate uses of import * outside of an interactive session. 
from _SomeClasses import * 
a = A() 

# _SomeClasses.py 
class A(object): 
    def __init__(self): 
     print "Hi! A is instantiated!" 

class B(object): 
    def __init__(self): 
     print "Hi! B is instantiated!" 

その後、あなたは高価な初期化をしたくない場合はa_SomeClassesをインポートし、そのモジュールを使用します。 aに依存する他のコードは、SomeClassesをインポートし、自動的に作成されたaインスタンスを取得します。