【发布时间】:2021-02-21 10:23:04
【问题描述】:
有没有办法(仅使用 python。即:没有 bash 脚本或其他语言代码)在文件夹内的每个脚本中调用特定函数,而无需显式导入所有函数。
例如,假设这是我的结构:
main.py
modules/
module1.py
module2.py
module3.py
module4.py
每个moduleX.py 都有这个代码:
import os
def generic_function(caller):
print('{} was called by {}'.format(os.path.basename(__file__), caller))
def internal_function():
print('ERROR: Someone called an internal function')
而main.py 有这个代码:
import modules
import os
for module in modules.some_magic_function():
module.generic_function(os.path.basename(__file__))
所以如果我运行main.py,我应该得到这个输出:
module1.py was called by main.py
module2.py was called by main.py
module3.py was called by main.py
module4.py was called by main.py
*请注意internal_function()不应被调用(不像question)。另外,我不想显式声明每个模块文件,即使在 __init__.py
顺便说一句,我不介意为此使用类。事实上,它可能会更好。
【问题讨论】:
-
你能澄清一下“不需要全部导入”的意思吗?你的意思是没有明确导入它们,例如
import module1,或者你的意思是不导入它们根本,例如仅隐式导入已定义generic_function的那些? -
@MisterMiyagi “不需要全部导入”我的意思是不需要做
import module1, module2, module3, module4, module5(即显式导入它们),但我至少需要有一种控制权模块(例如,如果generic_function()为某个模块返回 True,则为同一模块调用另一个函数)