【发布时间】:2012-05-17 02:32:00
【问题描述】:
假设我有一个包含模块的包:
SWS/
__init.py__
foo.py
bar.py
time.py
并且模块需要引用彼此包含的函数。我的time.py 模块似乎遇到了问题,因为有一个同名的标准模块。
例如,如果我的 foo.py 模块同时需要我的 SWS.time 和标准 python time 模块,我会遇到麻烦,因为解释器会查看包内部并在之前找到我的 time.py 模块它遇到了标准的time 模块。
有没有办法解决这个问题?这是禁止的情况吗?不应该重复使用模块名称吗?
任何关于包装理念的解决方案和意见都会在这里有用。
【问题讨论】:
-
我认为很明显你不应该重用标准的 python 模块名称。这只是自找麻烦。
-
为什么很明显?
-
查看 httplib/httplib2 和 urllib/urllib2。它使图书馆的世界变得更丑陋,但这比命名冲突和不确定的行为更可取。
-
当您试图避免名称与关键字冲突时,可能还值得补充一点,python style guide 建议使用
class_而不是class(尾随下划线)。在这里可能合适,并使用import time_ as time。 -
大约 14 年前,我制作了一个名为 wave 的模块。试了很久,还是不行。事实证明,同时添加了该名称的标准模块。是的,我知道,我一定是老了……(而且我不是明眼人)。很明显:不要太快判断。
标签: python module namespaces package