【发布时间】:2019-12-08 10:26:02
【问题描述】:
我需要创建一个 python 类的实例并将其存储在 C# 变量中。进程的输入数据是完整的模块名称和类名称。我正在尝试使用以下方法:
// Here's a sample input:
var moduleName = "sp.content.abilities.torpedo"
var className = "AbilityTorpedo"
// Here's my module loading and class instaitiation
var moduleScope = ScriptEngine.ImportModule(moduleName);
var scriptClass = moduleScope.GetVariable(className);
return ScriptEngine.Operations.CreateInstance(scriptClass);
我的文件夹结构如下所示,“Scripts”目录被添加为 IronPython 的搜索路径之一(torpedo.py 确实包含AbilityTorpedo 类):
Scripts
│ .editorconfig
│ __main__.py
│
└───sp
│ __init__.py
│
└───content
│ __init__.py
│
└───abilities
torpedo.py
__init__.py
运行列出的实例化方法时,moduleScope.GetVariable(className); 行失败,并出现以下异常:
'ObjectDictionaryExpando' object has no attribute 'AbilityTorpedo'
在调试时,我注意到 ImportModule 操作返回了从名称的第一部分加载的模块,同时还加载了整个模块层次结构(例如,content 标记为红色的模块)@987654321 @
有没有合适的方法让我通过全名加载模块,而不是遍历范围来查找我需要的类?
【问题讨论】:
标签: c# .net module ironpython python-module