実行時に、Python コードはロードするサブモジュールの名前を取得しますが、これは以前はわかりませんでした。ここで、このサブモジュールが既存のモジュール内に存在するかどうかを確認したいと思います。foo
とbar
を指定できるこの構造を考えてみましょう。
master/
|
|- __init__.py
|
|- foo/
| |
| |- __init__.py
|
|- bar/
|
|- __init__.py
さて、通常はこれを行います。これは定義と変数に対して機能します。
import master
unknown_submodule = "foo"
if hasattr(master, unknown_submodule):
pass # all's well
または、同じように機能する AttributeError をキャッチしています。
ただし、上記のファイル構造では、このアプローチを立ち上げて機能させることができません。hasattr()
は常に False を返します (つまり、常に AttributeError がスローされます)。
を見るとdir(master)
、次の出力が表示されます。
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
inを明示的に指定__all__
しmaster/__init__.py
ても役に立ちませんが、dir() を
['__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
私が間違っていること、またはこれらの種類のテストを達成する方法があるかどうか、何か考えはありますか? (ちなみに: Win/Cygwin 上の Python 2.6、興味があれば)