这取决于您使用的Python版本。如果您的目标Python版本是2.4或更早(在2015年,我希望不是这样),那么是不好的做法,因为没有办法(除非使用黑客手段)区分这两个模块。
然而,在Python 2.5+中,我认为在包命名空间内重复使用标准库模块名称是完全可以的;实际上,这就是PEP328的精神。
随着Python库的扩展,越来越多的现有包内部模块意外地遮盖了标准库模块。在包内部,这是一个特别困难的问题,因为没有办法指定哪个模块是所需的。为了解决歧义,建议foo将始终是可以从sys.path到达的模块或包。这被称为绝对导入。
python-dev社区选择将绝对导入作为默认值,因为它们是更常见的用例,并且绝对导入可以提供所有相对(包内)导入的功能——尽管在重命名层次结构较高的包件或将一个包移动到另一个包中时会增加一些困难。
由于这代表了语义上的变化,所以在Python 2.5和2.6中,绝对导入将通过使用“from __future__ import absolute_import”来进行选择。
“SWS.time”显然不同于“time”,作为代码的读者,我希望“SWS.time”不仅使用“time”,而且还能以某种方式扩展它。
因此,如果“SWS.foo”需要导入“SWS.time”,那么它应该使用绝对路径:
from SWS import time as sws_time
或者,它应该使用明确的相对导入,就像Bakuriu的答案中所示:
from . import time as sws_time
如果您需要在SWS.time
模块中导入标准库time
模块,则首先需要导入未来特性(仅适用于Python 2.5+;Python 3+默认执行此操作):
from __future__ import absolute_import
import time
time.sleep(28800)
注意:from __future__ import absolute_imports
只会影响导入语句 在 导入未来特性的模块内部,而不会影响任何其他模块(因为这可能会对相对导入有依赖的其他模块产生不利影响)。
class_
而不是class
(后面加下划线)。在这里使用import time_ as time
也许更合适。 - Casey Kuball