Las clases de IronPython son no .NET classes. Son instancias de IronPython.Runtime.Types.PythonType que es la metaclase de Python. Esto se debe a que las clases Python son dinámicas y admiten la adición y eliminación de métodos en tiempo de ejecución, cosas que no se pueden hacer con las clases .NET.
Para usar las clases de Python en C#, necesitará usar la clase ObjectOperations. Esta clase le permite operar en tipos e instancias de Python en la semántica del lenguaje en sí. p.ej. utiliza los métodos mágicos cuando es apropiado, promueve automáticamente enteros a largos, etc. Puede obtener más información sobre ObjectOperations mirando la fuente o utilizando el reflector.
Aquí hay un ejemplo. Calculator.py contiene una clase simple:
class Calculator(object):
def add(self, a, b):
return a + b
Usted puede utilizarlo desde su pre .NET 4.0 C# código como esto:
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)
Usted tendrá que hacer referencia a las asambleas IronPython.dll, de Microsoft. Scripting y Microsoft.Scripting.Core.
C# 4 hizo esto mucho más fácil con el nuevo tipo dinámico.
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);
Si está utilizando Visual Studio 2010 o posterior con soporte NuGet, simplemente ejecútelo para descargar y consultar las bibliotecas apropiadas.
Install-Package IronPython
I no tienen la representante para editar esto , pero en la muestra Calculator.py, la primera "def" debe sangrarse. ¡Gran ejemplo, sin embargo! Muy útil. Ahora que .Net 4.0 está listo, sería bueno ver un ejemplo actualizado. –
Se agregó un ejemplo de .Net 4.0, utilizando su misma clase de muestra de Calculadora. –
Gracias, agregué la sangría. –