如何不在 Python 模块中导入导入的子模块?

How to not import imported submodules in a Python module?

在我的 Python 模块中,我经常使用 datetime 等子模块。问题是这些模块可以从外部访问:

# module foo
import datetime

def foosay(a):
    print "Foo say: %s" % a

来自 IPython:

import foo
foo.datetime.datetime.now()

我想知道如何正确隐藏属于foo内部业务的子模块。

我天真地想过import datetime as _datetime甚至import datetime as __datetime,但这不是很令人愉快的解决方案。我也读过 __all__,但它只涉及使用 from foo import * 导入的内容。

您可以在模块 foo 中使用它的函数中导入日期时间:

def foodate():
    import datetime
    print datetime.datetime.now()

def foosay(a):
    print "Foo say: %s" % a

现在导入 foo 将不会导入 datetime。

编辑: 您还可以通过不导入整个 datetime 模块来减少内存占用,只导入您需要的 methods/functions:

from datetime.datetime import now