当前位置: 首页 > news >正文

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()
http://www.lryc.cn/news/572499.html

相关文章:

  • 磐基PaaS平台MongoDB组件SSPL许可证风险与合规性分析(上)
  • Git(三):分支管理
  • 达梦数据库锁超时问题
  • 使用Dagster资产工厂模式高效管理重复ETL任务
  • 识别网络延迟与带宽瓶颈
  • M1芯片macOS安装Xinference部署大模型
  • Datawhale 网络爬虫技术入门第2次笔记
  • QT6与VS下实现没有CMD窗口的C++控制台程序
  • 日本生活:日语语言学校-日语作文-沟通无国界(3)-题目:わたしの友達
  • 编程马拉松的定义、运作与发展
  • C语言标准I/O库详解:文件操作与缓冲区机制
  • Qt蓝图式技能编辑器状态机模块设计与实现
  • html实现登录与注册功能案例(不写死且只使用js)
  • 深入解析select模型:FD_SET机制与1024限制的终极指南
  • Linux系统远程操作和程序编译
  • 23.ssr和csr的对比?如何依赖node.js实现
  • [11-5]硬件SPI读写W25Q64 江协科技学习笔记(20个知识点)
  • 嵌入式编译工具链熟悉与游戏移植
  • 基于C#的Baumer相机二次开发教程
  • OpenSSL引擎 + PKCS11 + SoftHSM2认证
  • WHAT - React Native 开发 App 从 0 到上线全流程周期
  • 【嵌入式】鲁班猫玩法大全
  • 第1章: 伯努利模型的极大似然估计与贝叶斯估计
  • 软件工程(期末复习班)
  • 23种设计模式--简单工厂模式理解版
  • Arduino Nano 33 BLE Sense Rev 2开发板使用指南之【外设开发】
  • 零基础指南:利用Cpolar内网穿透实现Synology Drive多端笔记同步
  • Linux基本指令篇 —— mkdir指令
  • MFC中使用CRichEditCtrl控件让文本框中的内容部分加粗
  • 分布变化的模仿学习算法