2016-11-19 12 views
0

私はこの声明を実験しましたが、結果は公式の記述と一致しませんでした。 Quotationは以下である:"import ... starement"の正確な意味は何ですか?

フォームから

ザは、やや複雑なプロセスを使用する:

  1. 句、ローディングからで指定し、必要に応じて初期化モジュールを見つけます。インポートされたモジュールは、その名前の属性
  2. ない場合がある場合
    1. チェック、その名前でサブモジュールをインポートして、インポートされたモジュールをチェックしようとします。import句で指定された識別子のそれぞれについて、
    2. その属性に対して再度
    3. 属性が見つからない場合は、ImportErrorが発生します。
    4. そうでない場合は、その値を参照するには、名前を使用して、ローカル名前空間に格納された句のように、それはそう、私は名前空間のパッケージを作成し

属性名を使用して、存在する場合l007という名前のサブモジュールが配置されたl007という名前のサブモジュールがあります。インタープリターで "from l007 import l009"と入力した場合、実行はOKでしたが、その場合はImportErrorが発生していました。 私の理解は間違っていますか?

+0

なぜあなたはImportErrorが発生しているはずだと思いますか? – BrenBarn

+0

モジュールl009には、正式な記述に対応するl009という名前の属性はありません。 –

答えて

1

this documentation参照してください:サブモジュールは、いずれかのメカニズムを使用してロードされ

(例えばimportlibのAPI、importまたはimport-from文、または内蔵__import__())サブモジュールに、親モジュールの名前空間内に配置されているバインディングオブジェクト。たとえば、パッケージspamにサブモジュールfooがある場合、spam.fooをインポートした後、spamにサブモジュールにバインドされた属性fooが割り当てられます。サブモジュールのインポートが発生した後、あなたの引用のステップは、彼らがしている順序になっている理由です

l007が最初に属性l009を持っていないにもかかわらず、それは1になります。

関連する問題