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

标签 python import module visibility

在我的 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 将不会导入日期时间。

编辑:您还可以通过不导入整个日期时间模块,仅导入您需要的方法/函数来减少内存占用:

from datetime.datetime import now

关于python - 如何不导入Python模块中导入的子模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39993663/

相关文章:

python - 在执行任何导入和/或其他语句之前用虚拟对象替换对象

c++ - GetModuleHandle(),用于另一个进程中的 DLL

node.js - node_modules/bcrypt/node_modules/bindings/bindings.js :83

python - Scrapy:爬取共享相同项目、管道和设置但具有单独输出的多个蜘蛛

python - tf.global_variables_initializer() 还会初始化 tf.data.Dataset 的迭代器吗?

python - 将 Lasagne 模型转换为 Keras

python - django:如何为工厂男孩动态指定数据库

javascript - 如何在 NodeJS 中使用函数和对象而不需要它们

php - 将xml数据导入mysql数据库

python - 三个python模块,相互调用