2012-02-22 61 views
0

有沒有反映IronPython類從C#中找到它的方法的方法?我可以通過RubyClass和RubyMethodInfo爲IronRuby做到這一點。 IronPython有類似的類嗎?謝謝。從C#中查找IronPython類的方法

回答

0

如果您使用的是.NET 4或更高,這很容易,如果你只是讓蟒蛇爲你做它:

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__