7

我们一直使用 python 的导入机制来导入模块和变量以及其他东西..但是,有什么可以作为导出的吗?像:

我们从一个模块中导入东西:

from abc import *

那么我们可以像这样导出吗?:

to xyz export *

或将 a、b、c 导出到 program.py

我知道这个问题不是这里要问的典型类型的问题..但只是出于好奇..我检查了python控制台,没有任何东西作为“导出”存在..也许它以不同的名称存在。 .?

4

1 回答 1

9

首先,导入你想要导出内容的模块,这样你就有了对它的引用。然后将要导出的内容分配为模块的属性:

# to xyz export a, b, c
import xyz
xyz.a = a
xyz.b = b
xyz.c = c

要进行通配符导出,您可以使用循环:

# to xyz export *
exports = [(k, v) for (k, v) in globals().iteritems() if not k.startswith("_")]
import xyz
for k, v in exports: setattr(xyz, k, v)

(请注意,我们在导入模块之前收集要导出的对象列表,这样我们就可以避免导出对我们刚刚导入自身的模块的引用。)

这基本上是猴子修补的一种形式。它有它的时间和地点。当然,要使其工作,必须执行“导出”的模块本身;简单地导入将要修补的模块不会神奇地意识到某处的其他代码将对其进行修补。

于 2013-01-04T20:17:20.830 回答