Python 库定义中的Import语句似乎未执行
我遇到了一个问题,这可能是一个很基本的问题,但作为一名Python学习者,我已经为此奋斗了好几个小时。到目前为止,文档还没有给我提供答案 问题在于,当我从python脚本导入模块时,模块中包含的import语句似乎没有执行。我的资料如下: 我有一个文件project.py(即python库),它如下所示:Python 库定义中的Import语句似乎未执行,python,import,nameerror,Python,Import,Nameerror,我遇到了一个问题,这可能是一个很基本的问题,但作为一名Python学习者,我已经为此奋斗了好几个小时。到目前为止,文档还没有给我提供答案 问题在于,当我从python脚本导入模块时,模块中包含的import语句似乎没有执行。我的资料如下: 我有一个文件project.py(即python库),它如下所示: import datetime class Project: """ This class is a container for project data """ titl
import datetime
class Project:
""" This class is a container for project data """
title = ""
manager = ""
date = datetime.datetime.min
def __init__( self, title="", manager="", date=datetime.datetime.min ):
""" Init function with some defaults """
self.title = title
self.manager = manager
self.date = date
import project
print datetime.datetime.min
该库稍后用于导入项目的脚本(file.py
),其启动方式如下:
import datetime
class Project:
""" This class is a container for project data """
title = ""
manager = ""
date = datetime.datetime.min
def __init__( self, title="", manager="", date=datetime.datetime.min ):
""" Init function with some defaults """
self.title = title
self.manager = manager
self.date = date
import project
print datetime.datetime.min
当我试图用Pythonfile.py
执行这个脚本时,问题就出现了。Python随后抱怨出现以下错误:
Traceback (most recent call last):
File "file.py", line 3, in <module>
print datetime.datetime.min
NameError: name 'datetime' is not defined
回溯(最近一次呼叫最后一次):
文件“File.py”,第3行,在
打印datetime.datetime.min
NameError:未定义名称“datetime”
如果我试图直接从pythonshell生成相同的语句(import
和print
),也会发生这种情况
datetime
模块不应该在我调用import project
时自动导入吗
非常感谢。日期时间模块只导入
项目
名称空间。因此,您可以通过project.datetime.datetime.min
访问它,但实际上您应该直接将它导入到脚本中
在
project.py
文件中创建的每个符号(名称)(如project
类)最终都位于project
命名空间中,其中包括从其他模块导入的内容。然而,这并不像看上去那么低效-实际的datetime
模块仍然只导入一次,不管您导入多少次。每次在第一个名称空间之后导入它时,它只是将名称导入到当前名称空间中,而不是真正执行读取和导入模块的所有繁重工作。尝试将import
语句看作大致相当于:
project = __import__('project')
实际上,import
语句只是对变量的赋值。加载模块时可能会有一些副作用,但从脚本内部,您看到的只是一个简单的名称赋值
您可以使用project import*中的从模块中提取所有名称,但是不要这样做,因为这样会使代码更脆弱,更难维护。相反,要么直接导入模块,要么直接导入所需的名称
因此,对于您的代码:
import datetime
from project import Project
是你应该做的事情。告诉一个新的python程序员,一些非常基本的东西,如导入
等于超级内部。如果你不需要使用它,你的生活会更好\uuuuuu导入
函数似乎适得其反(使用真正的伪代码可能会更好)我的观点是,它仅仅等同于在一个神奇的函数和一个简单的赋值中所做的事情。你可以把\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
读作“\uuuuuuuuu。。。它不是“超级内部”(尽管有四个下划线,但它与其他非内部的、未被弃用的内置函数一起记录);OTOH它肯定属于pas devant les enfants类别。datetime
在您的模块中没有任何意义,因为您没有将该名称绑定到任何内容。其他模块不会影响您的本地名称空间!