我正在尝试使用嵌入式IronPython脚本编写C#代码。然后想要分析脚本的内容,即列出所有变量,函数,类及其成员/方法。
有一种简单的方法可以开始,假设我已经定义了范围并且已经执行了代码:
dynamic variables=pyScope.GetVariables();
foreach (string v in variables)
{
dynamic dynamicV=pyScope.GetVariable(); /*seems to return everything. variables, functions, classes, instances of classes*/
}
但是我如何弄清楚变量的类型是什么?对于以下python'对象',
dynamicV.GetType()
将返回不同的值:
x = 5 --system.Int32
y =“asdf”--system.String
def func():... - IronPython.Runtime.PythonFunction
z = class() - IronPython.Runtime.Types.OldInstance,如何识别实际的python类是什么?
类NewClass - 抛出错误,GetType()不可用。
这几乎就是我要找的东西。我可以捕获在不可用时抛出的异常,并假设它是一个类声明,但这似乎是不洁净的。有更好的方法吗?
要发现类的成员/方法,我看起来可以使用:
ObjectOperations op = pyEngine.Operations;
object instance = op.Call("className");
foreach (string j in op.GetMemberNames("className"))
{
object member=op.GetMember(instance, j);
Console.WriteLine(member.GetType());
/*once again, GetType() provides some info about the type of the member, but returns null sometimes*/
}
另外,如何获取方法的参数?
谢谢!
答案 0 :(得分:1)
这不是真正支持的东西,但所有信息都在那里。您有两种选择:
__class__
和__dict__
。这可能是更好的选择。