You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从其他模块检查并调用Python __main__模块中符合规则的函数?

问题解答:在模块中调用__main__模块的特定前缀函数

完全可以实现,不需要将函数打包进类里。核心思路是直接获取__main__模块的对象,遍历其属性并筛选出符合条件的函数执行。

实现步骤与代码示例

1. 编写模块文件 my_module.py

import sys

def run_all_auto():
    # 获取__main__模块的对象
    main_module = sys.modules['__main__']
    # 遍历模块的所有属性名称
    for attr_name in dir(main_module):
        # 筛选以auto_开头的属性
        if attr_name.startswith('auto_'):
            attr_obj = getattr(main_module, attr_name)
            # 确认是可调用的函数,且是主模块自身定义的函数
            if callable(attr_obj) and attr_obj.__module__ == '__main__':
                print(f"执行函数: {attr_name}")
                attr_obj()

2. 编写主脚本 main.py

import my_module

# 定义符合前缀规则的函数
def auto_login():
    print("执行自动登录逻辑")

def auto_backup():
    print("执行自动备份逻辑")

# 定义不符合规则的函数(不会被调用)
def manual_clean():
    print("手动清理逻辑")

if __name__ == "__main__":
    my_module.run_all_auto()

运行结果

执行main.py后,会输出:

执行函数: auto_login
执行自动登录逻辑
执行函数: auto_backup
执行自动备份逻辑

关键说明

  • 无需传递dir()参数,直接通过sys.modules['__main__']获取主模块对象是更可靠的方式,能直接拿到属性对应的实际对象,而非仅名称列表。
  • 添加attr_obj.__module__ == '__main__'判断,可避免误执行从其他模块导入的同名前缀函数,确保只运行主脚本自身定义的函数。

内容的提问来源于stack exchange,提问作者Zack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 01:33:16