我正在编写一个如下所示的Python包:
|- datum/
|- __init__.py
|- database.py
__初始化__。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 :(得分:0)
NameError
表示无法找到本地或全局名称。我会确保你的&#34; load_pwd_parcels.py&#34;文件包括:
from database import Database
或者,您可以这样做:
import database
source_db = database.Database(source_db_url)
后一个选项是一个很好的选择,因为它为database
提供了自己的命名空间。用PEP 20 -- The Zen of Python中蒂姆·彼得斯的话来说:
&#34;命名空间是一个很棒的主意 - 让我们做更多的事情!&#34;