2016-03-22 41 views
3

我正在寫一個Python包,看起來像這樣:無法實例Python類,即使它被導入

|- datum/ 
    |- __init__.py 
    |- database.py 

__init__.py

from .database import Database 

def connect(url): 
    print(Database)   # for debugging 
    return Database(url) 

database.py

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

'load_pwd_parcels.py'相對於'datum'目錄存儲在哪裏? – chepner

+0

它在一個單獨的包(一個Flask應用程序)。 – Rob

+1

你確定你正在導入一個具有'Database'類的'datum'版本嗎?您的問題中沒有足夠的信息來重現問題。 – chepner

回答

0

A NameError表示無法找到本地或全局名稱。我會確保你的「load_pwd_parcels.py」文件包括:

from database import Database 

或者,你可以這樣做:

import database 
source_db = database.Database(source_db_url) 

後一個選項是一個不錯的選擇,因爲它給database它自己的命名空間。用蒂姆彼得斯的話說:PEP 20 -- The Zen of Python: 「命名空間是一個重要的想法 - 讓我們做更多的這些!」

相關問題