7

次のようなパッケージ構造があります。

mypackage
  __init__.py
  mymodule.py

__init__.pyたとえば、いくつかの「定数」宣言を入れます。

DELIMITER='\x01'

ただし、次を追加しない限り、 mymodule.pyのコードは DELIMITER にアクセスできません。

from __init__ import *

mymodule.pyファイルの先頭へ。私はここで概念を逃したと思います。で宣言されているものは何でも__init__.py、インポートステートメントを介してアクセスされるまでメモリに読み込まれないということですか? __init__.pyまた、これはファイルに入れる典型的なタイプですか?

4

2 に答える 2

5

Python、パッケージのインポート時にコードを実行します__init__.py。これにより、一部の初期化を行うことができます。ただし、実行されたからといって、他のモジュール内から変数にアクセスできるとは限りません。

例えば:

testpackage
    __init__.py
    testmod.py

__init__.pyがコードprint "Initializing __init__"testmod.py持っているとしましょうprint "Initializing testmod"。その場合、testpackageortestmodをインポートすると、初期化コードが実行されます。

dynamic-oit-vapornet-c-499:test dgrtwo$ python -c "import testpackage"
Initializing __init__
dynamic-oit-vapornet-c-499:test dgrtwo$ python -c "from testpackage import testmod"
Initializing __init__
Initializing testmod

ただし、 からの変数へのアクセスは提供しませ。これは明示的に行う必要があります。testmod.py__init__.py

于 2012-07-31T19:46:38.293 に答える
2

パッケージは、パッケージ内のすべてのモジュールを何らかの形でまとめるわけではありません。__init__インポートしない限り、他のモジュールでアクセスできるようにする理由はありません。

于 2012-07-31T19:27:07.030 に答える