如何在Abaqus Python 2.7.15驱动脚本中导入外部父类构建继承类
问题描述
文件结构
src |-main_file.py |-utils | |-util_debug.py |-classes | |-class_coupon_generic.py | |-class_coupon_fatigue_type_1.py | |-class_coupon_fatigue_type_2.py
class_coupon_generic.py 包含父类 coupon_generic,作为各类试样的基类;class_coupon_fatigue_type_1.py 中的 coupon_fatigue_type_1 类继承自 coupon_generic。需要在 utils/util_debug.py 中正确导入父类与子类,同时支持通过字符串名称动态导入子类以切换试样类型,但当前导入时始终报错 name 'coupon_generic' is not defined。
解决方案
1. 修复子类文件的父类导入
首先确保子类文件能正确找到父类,两种可行方式:
绝对导入(推荐)
在 class_coupon_fatigue_type_1.py 中添加:
from classes.class_coupon_generic import coupon_generic class coupon_fatigue_type_1(coupon_generic): # 子类业务逻辑 pass
相对导入(需将classes设为包)
在 classes 目录下创建空的 __init__.py 文件,将其转为Python包,然后在子类文件中使用相对导入:
from .class_coupon_generic import coupon_generic class coupon_fatigue_type_1(coupon_generic): # 子类业务逻辑 pass
2. 配置util_debug.py的模块搜索路径
在 util_debug.py 开头添加代码,将src目录加入Python的模块搜索路径,否则无法识别classes包:
import sys import os # 获取src目录的绝对路径 src_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) if src_path not in sys.path: sys.path.append(src_path)
3. 静态导入类(常规场景)
路径配置完成后,可直接导入所需类:
from classes.class_coupon_generic import coupon_generic from classes.class_coupon_fatigue_type_1 import coupon_fatigue_type_1 # 实例化子类 sample = coupon_fatigue_type_1()
4. 字符串动态导入类(调试切换场景)
使用importlib实现通过字符串名称动态导入子类:
import importlib def load_coupon_class(class_name): # 拼接模块名:类名对应classes下的模块文件 module_name = f"classes.class_{class_name}" # 导入模块 module = importlib.import_module(module_name) # 获取模块中的类对象 return getattr(module, class_name) # 使用示例:传入字符串获取类并实例化 coupon_class = load_coupon_class("coupon_fatigue_type_1") sample = coupon_class()
关键注意事项
- 子类文件必须先正确导入父类,否则动态导入子类时会因父类未定义报错。
- 必须将
src目录加入sys.path,否则Python无法找到classes包。 - 使用相对导入时,
classes目录必须存在__init__.py以成为合法Python包。
内容的提问来源于stack exchange,提问作者rupsagar
相关产品推荐
相关产品推荐

