2016-03-22 5 views
3

をインポートされていていても、Pythonのクラスをインスタンス化することはできませんは、それは私がこのようになりますPythonパッケージを書いて

class Database(object): 
    def __init__(self, url): 
     self.url = url 

    ...more methods 

これはインストールされています開発モードではdatumというパッケージとして提供されます。私は次のように、このパッケージのconnect外を呼び出す場合:

import datum 
db = datum.connect('postgresql://xxx') 

...これが出力されます。

<class 'datum.database.Database'> 
Traceback (most recent call last): 
    File "Z:\AIS\Flask\ais\engine\scripts\load_pwd_parcels.py", line 30, in <module> 
    source_db = Database(source_db_url) 
NameError: name 'Database' is not defined 

クラスは細かいインポートされているので、私は混乱している - 私はそれを印刷することができますし、それにもdirを実行して私のすべてのメソッドを見てください - しかし、私は何かをインスタンス化しようとすると "定義されていません"。誰も私がここで間違っていることを知っていますか?

+0

'datum'ディレクトリに対して' load_pwd_parcels.py'がどこに保存されていますか? – chepner

+0

別のパッケージ(Flaskアプリケーション)です。 – Rob

+1

'Database'クラスを持つ' datum'のバージョンをインポートしていますか?あなたの質問には、問題を再現するのに十分な情報がありません。 – chepner

答えて

0

NameErrorは、ローカル名またはグローバル名が見つからないことを示します。私はあなたの「load_pwd_parcels.py」ファイルが含まれていることを確認します:

from database import Database 

を別の方法として、あなたができる:それはdatabaseその非常に独自の名前空間を与えるので

import database 
source_db = database.Database(source_db_url) 

後者のオプションは素晴らしい選択肢です。ティム・ピーターズの言葉でPEP 20 -- The Zen of Python: "名前空間は素晴らしいアイデアを掴んでいます - それ以上のことをしよう!"

関連する問題