Les classes IronPython sont no Les classes .NET. Ce sont des instances de IronPython.Runtime.Types.PythonType qui est la métaclasse Python. En effet, les classes Python sont dynamiques et permettent l'ajout et la suppression de méthodes au moment de l'exécution, ce qui est impossible avec les classes .NET.
Pour utiliser les classes Python en C#, vous devez utiliser la classe ObjectOperations. Cette classe vous permet d'opérer sur des types et des instances Python en respectant la sémantique du langage lui-même. Par exemple, elle utilise les méthodes magiques lorsque cela est approprié, fait passer automatiquement les entiers en longs, etc. Vous pouvez en savoir plus sur ObjectOperations en regardant la source ou en utilisant reflector.
Voici un exemple. Calculator.py contient une classe simple :
class Calculator(object):
def add(self, a, b):
return a + b
Vous pouvez l'utiliser à partir de votre code C# pré .NET 4.0 comme ceci :
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)
Vous devrez référencer les assemblages IronPython.dll, Microsoft.Scripting et Microsoft.Scripting.Core.
C# 4 a rendu cela beaucoup plus facile avec le nouveau type dynamique.
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 vous utilisez Visual Studio 2010 ou une version ultérieure avec la prise en charge de NuGet, il suffit d'exécuter cette opération pour télécharger et référencer les bibliothèques appropriées.
Install-Package IronPython