2016-03-22 12 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: “命名空间是一个重要的想法 - 让我们做更多的这些!”

相关问题