python脚本间的相互调用
在 Python 中,脚本之间可以通过模块导入机制相互调用类或函数。这里script_a.py是被调脚本,script_b.py是调用脚本script_a.py的脚本。
以下是几种常见的方法:
1. 直接导入整个脚本
# script_a.py def function_a():print("这是 script_a 中的函数")class ClassA:def method_a(self):print("这是 ClassA 中的方法")
# script_b.py import script_a # 导入整个脚本script_a.function_a() # 调用函数obj = script_a.ClassA() # 创建类的实例 obj.method_a() # 调用类的方法
2. 导入特定函数或类
# script_b.py from script_a import function_a, ClassA # 导入特定函数和类function_a() # 直接调用函数obj = ClassA() # 直接使用类 obj.method_a()
3. 使用别名导入
# script_b.py import script_a as sa # 使用别名sa.function_a()obj = sa.ClassA() obj.method_a()
4. 导入模块中的全部内容(不推荐)
# script_b.py from script_a import * # 导入所有内容(不推荐)function_a()obj = ClassA() obj.method_a()
5. 动态导入(当模块名在运行时才确定)
# script_b.py import importlib# 动态导入模块 module_name = "script_a" script_a = importlib.import_module(module_name)script_a.function_a()obj = script_a.ClassA() obj.method_a()
6. 在不同目录中调用
如果你的脚本在不同目录中,需要确保目标脚本所在的目录在 Python 的模块搜索路径中:
# script_b.py import sys import os# 添加目标脚本所在目录到搜索路径 target_dir = os.path.abspath("path/to/script_a_directory") sys.path.insert(0, target_dir)import script_ascript_a.function_a()
7. 包结构下的调用
如果你的脚本在包结构中:
my_package/
__init__.py
script_a.py
script_b.py
# script_b.py
from .script_a import function_a # 相对导入
function_a()
8. 在类中调用另一个脚本的函数
# script_b.py from script_a import function_aclass ClassB:def __init__(self):self.value = 42def use_external_function(self):function_a() # 调用外部脚本的函数print(f"值: {self.value}")if __name__ == "__main__":b = ClassB()b.use_external_function()