2013-09-01 11 views
7

numpyのようなライブラリの使い方に関する質問がありました。 numpyをインポートすると、numpy.array、numpy.sqrtなどの組み込みクラス、関数、定数のホストにアクセスできます。サブモジュールと関数を持つPythonモジュール

しかし、numpy内にはnumpy.testingなどのサブモジュールがあります。

これはどのように行われますか?私の限定された経験では、サブモジュールを持つモジュールはinit .pyファイルのフォルダであり、関数/クラスを持つモジュールは実際のpythonファイルです。どのように機能/クラスも持つモジュール "フォルダ"を作成するには?

答えて

17

.py個のファイルと__init__.pyのフォルダは、packageと呼ばれます。クラスと関数を含むファイルの1つはmoduleです。フォルダネストはサブパッケージを与えることができます。

mypackage 
    __init__.py 
    module_a.py 
    module_b.py 
     mysubpackage 
      __init__.py 
      module_c.py 
      module_d.py 

私はmypackage.module_aまたはmypackage.mysubpacakge.module_cなどをインポートできます。

だから例えば私は、次のような構造を持っていた場合。

mypackage(上記のnumpy関数のようなもの)には、そのコードを__init__.pyに入れることで関数を追加することもできます。これは通常、醜いと考えられていますが。

numpy's __init__.pyを見ると、そこに多くのコードが表示されます。これは多くの場合、これらのトップレベルのクラスと機能を定義しています。 __init__.pyコードは、パッケージがロードされたときに最初に実行されるコードです。

+0

次に、numpyやscipyのようなライブラリをインポートし、クラス/関数(モジュールのような)と他のモジュール(パッケージのようなもの)の両方を含むことができます。 numpy.array(クラス)またはnumpy.testing.assert(モジュールを取得)を実行できます。 – ImpGuard

+0

私はちょうどそれに答えました、それはすべて '__init __。py'にあります。インタプリタによってロードされたときに、そこにある関数はすべてパッケージのファーストクラスのメンバになります。 –

+0

ああ、それは私が不思議に思っていたものです。私はそれが雑多の多くの以来醜いと考えられると思った。論理はそこに入るだろう。私はすべてが別々にコード化されていて、何とかして、後で__init__.pyにすべて組み合わされていると思いますか? これは非常に便利ですが、たくさんのコードを1つのファイルにダンプすることなく、どのように複製するのかよくわかりません。 – ImpGuard

関連する問題