2012-02-29 6 views
2

私のプロジェクトには、多くの* .pyソースファイル(ほとんどの場合1つのクラスから構成され、そのクラスによって名前が付けられたパッケージ)を含むパッケージがあります。私は、パッケージ内のすべてのクラスをインポートするパッケージを1つのインポートとして機能させる

import Package.SomeClass.SomeClass 
import Package.SomeOtherClass.SomeOtherClass 
import ... 

を記述する必要はありませんように、このパッケージは、パッケージ内のすべてのファイルもインポートされ、インポートされたときにように、私はそれをしたいと思います。代わりに、私はちょうど

import Package 

を書くことができますし、ファイルの後のコードができるように、すべてのクラスは、パッケージで提供されています:

my_object = Package.SomeClass() 

__init__.pyでこれを行うための最も簡単な方法は何ですか?異なる場合、これを行う最も一般的な方法は何ですか?

答えて

3

通常の方法は、ウィンストンはそれを置くとして、実行する事は、すべてのクラスがモジュールで使用可能な__init__.pyファイル(グローバル)の名前空間を持つことであるpackage/__init__.py

from .SomeClass import SomeClass 
+0

にこのような何かをやってしかし、私はまだばかり\ __ init__に、すべてのクラスのためにこれを行う必要があることもできます。 – Dylan

+0

@Dylan、はい、あなたがほとんどのPythonライブラリを見るなら、それは彼らがしていることです。 –

+0

それでは、あなたの言葉をお伝えします。それはちょうど不気味な、Python以外のように見えます。 – Dylan

1

の内側にあります。行うには

一つの方法は、あるパッケージ内の各クラスについて

from .myclasfile import MyClass 

ラインを持つことであり、それは悪いことではありません。

しかし、もちろん、このことはPython、することができます「オートマジック」この __init__.py

import glob 
for module_name in glob.glob("*.py"): 
    class_name = module_name.split(".")[0] 
    mod = __import__(module_name) 
    globals()[class_name] = getattr(mod, class_name) 

del glob 
関連する問題