一个包中的多个模块导入一个公共模块

12 投票
1 回答
4093 浏览
提问于 2025-04-15 23:24

我正在写一个Python包,里面用到了插件的概念。每个插件都是一个Worker类的特化版本。每个插件都是以模块(脚本)的形式写的,并且在一个单独的进程中运行。

因为这些插件之间有一些共同的基础(比如它们都继承了一个叫'Worker'的基类),所以插件模块通常是这样的:

import commonfuncs

def do_work(data):
    # do customised work for the plugin
    print 'child1 does work with %s' % data

在C/C++中,我们有一个叫做“包含保护”的机制,可以防止同一个头文件被包含多次。

那么在Python中,我需要类似的机制吗?如果需要,我该怎么确保commonfuncs不会被“包含”多次呢?

1 个回答

27

不用担心:在程序运行过程中,只有第一次使用import导入一个模块时,这个模块才会被加载。之后的每一次导入其实只是从一个“缓存”字典中获取这个模块的对象(这个字典叫sys.modules,是通过模块名称字符串来索引的),所以这样做既很快又没有副作用。因此,不需要任何保护措施。

撰写回答