Ironpython类是
不
NET类。它们是Ironpython.runtime.types.pythontype的实例,后者是python元类。这是因为Python类是动态的,并且支持在运行时添加和删除方法,而这是您不能用.NET类做的。
要在C中使用python类,您需要使用objectOperations类。这个类允许您在语言本身的语义中对Python类型和实例进行操作。例如,它在适当的时候使用魔术方法,自动将整数提升为长整数等。您可以通过查看源代码或使用Reflector了解更多关于对象操作的信息。
下面是一个例子。calculator.py包含一个简单类:
class Calculator(object):
def add(self, a, b):
return a + b
您可以从.NET 4.0之前的代码中使用它,如下所示:
ScriptEngine engine = Python.CreateEngine();
ScriptSource source = engine.CreateScriptSourceFromFile("Calculator.py");
ScriptScope scope = engine.CreateScope();
ObjectOperations op = engine.Operations;
source.Execute(scope); // class object created
object klaz = scope.GetVariable("Calculator"); // get the class object
object instance = op.Call(klaz); // create the instance
object method = op.GetMember(instance, "add"); // get a method
int result = (int)op.Call(method, 4, 5); // call method and get result (9)
您需要引用程序集ironpython.dll、microsoft.scripting和microsoft.scripting.core。
C 4使用
新的
动态类型。
ScriptEngine engine = Python.CreateEngine();
ScriptSource source = engine.CreateScriptSourceFromFile("Calculator.py");
ScriptScope scope = engine.CreateScope();
source.Execute(scope);
dynamic Calculator = scope.GetVariable("Calculator");
dynamic calc = Calculator();
int result = calc.add(4, 5);
如果您将Visual Studio 2010或更高版本与Nuget支持结合使用,只需执行此操作即可下载并引用相应的库。
Install-Package IronPython