2011-08-04 7 views
3

私は約1ヶ月間Pythonで作業を始めましたが、私はより理解したいことに遭遇しました。それは輸入に関連しています。だから私はモジュールを持っています: root.core.connectivitypythonのインポート文

ここで私はクラス接続を定義しました。このモジュールには、テスト目的でのみ__main__が含まれています(違いがあれば分かりません)。

は、今私がしなければ:

from root.core.connectivity import Connectivity as class_name 

これは正常に動作します、しかし、私がしようとした場合:

import root.core.connectivity.Connectivity as class_name 

をこれがで失敗します:

ImportError: No module named Connectivity 

だから私の質問は、なぜ、ありますそれは失敗し、2つのステートメントの違いは何ですか?

よろしく、

はBogdan

答えて

5

importモジュールを取ります。 from X import YはXでモジュールを取り、Y. Connectivityのそのモジュールの要素はモジュールではありません。

+1

注意を説明します'from X import Y'を介して。パッケージ内容を '__init __。py'で明示的にインポートするのは、それが完全なモジュールではない場合には適切です。 – delnan

+0

入力していただきありがとうございます。 – Bogdan

0

root.core.connectivityはモジュールですが、root.core.connectivity.Connectivityはクラスです。 は輸入beetween違いをundertandと..から、あなたが見つけることができるuse the following linkことができる場所をインポートするには:

import_stmt ::= "import" module ["as" name] ("," module ["as" name])* 
| "from" relative_module "import" identifier ["as" name] 
    ("," identifier ["as" name])* 
| "from" relative_module "import" "(" identifier ["as" name] 
    ("," identifier ["as" name])* [","] ")" 
| "from" module "import" "*" 

例:あなたは識別子と「から...インポート」モジュールで「インポート」を使用して - 例えば、クラス、変数、他のモジュール。

は、だからあなたの第二の場合には次の操作を行うことができます

import root.core.connectivity as conn 
class_name = conn.Connectivity 
3

接続はモジュールで定義されたクラスで、インポートは、モジュールを取り、からインポート使用しているとき、私たちは、モジュールのクラスをインポートすることができます。モジュールはファーストクラスの値ですので、あなたが(そして時にはます)パッケージ(あるいはサブパッケージ)からモジュール `Y`をインポートすることができます 'X':

このリンクはそれをうまく http://effbot.org/zone/import-confusion.htm