从C#中查找IronPython类的方法

时间:2012-02-22 07:42:13

标签: ironpython

有没有办法反映IronPython类从C#中找到它的方法?我可以通过RubyClass和RubyMethodInfo为IronRuby做这个。 IronPython有类似的课程吗?感谢。

1 个答案:

答案 0 :(得分:0)

如果您使用的是.NET 4或更高版本,如果您让python为您执行此操作,这很容易:

  static void Main(string[] args)
    {
        var script = @"
            class TestObject:
                def Member1(self):
                     pass
        ";
        var setup = new ScriptRuntimeSetup();
        setup.LanguageSetups.Add(Python.CreateLanguageSetup(null));

        var runtime = new ScriptRuntime(setup);
        var engine = runtime.GetEngineByTypeName(typeof(PythonContext).AssemblyQualifiedName);

        var scope = engine.CreateScope();
        engine.Execute(script, scope);

        foreach (var member in GetMembers(engine, ((dynamic)scope).TestObject))
        {
            Console.WriteLine(member);
        }

        Console.ReadKey();

    }

确保调整示例脚本注释块以修复缩进。

然后只需创建一个方法,可以为任何对象(Python或C#)进行检查

 static dynamic GetMembers(ScriptEngine engine, dynamic obj)
 {
        var scope = engine.CreateScope();
        scope.SetVariable("objectToInspect", obj);
        return engine.Execute("def i(obj): l = dir(obj); l.sort(); return l;\ni(objectToInspect)", scope);
 }

打印:

Member1
__doc__
__module__