Instantiating a python class in C#

后端 未结 4 1364
情话喂你
情话喂你 2020-11-28 02:42

I\'ve written a class in python that I want to wrap into a .net assembly via IronPython and instantiate in a C# application. I\'ve migrated the class to IronPython, created

4条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-11-28 03:15

    Now that .Net 4.0 is released and has the dynamic type, this example should be updated. Using the same python file as in m-sharp's original answer:

    class Calculator(object):
        def add(self, a, b):
            return a + b
    

    Here is how you would call it using .Net 4.0:

    string scriptPath = "Calculator.py";
    ScriptEngine engine = Python.CreateEngine();
    engine.SetSearchPaths(new string[] {"Path to your lib's here. EG:", "C:\\Program Files (x86)\\IronPython 2.7.1\\Lib"});
    ScriptSource source = engine.CreateScriptSourceFromFile(scriptPath);
    ScriptScope scope = engine.CreateScope();
    ObjectOperations op = engine.Operations;
    source.Execute(scope);
    
    dynamic Calculator = scope.GetVariable("Calculator");
    dynamic calc = Calculator();
    return calc.add(x,y);          
    

    Again, you need to add references to IronPython.dll and Microsoft.Scripting.

    As you can see, the initial setting up and creating of the source file is the same.

    But once the source is succesfully executed, working with the python functions is far easier thanks to the new "dynamic" keyword.

提交回复
热议问题