Le classi IronPython sono non. Classi .NET. Sono istanze di IronPython.Runtime.Types.PythonType che è il metacllo Python. Questo perché le classi Python sono dinamiche e supportano l'aggiunta e la rimozione di metodi in fase di runtime, cose che non si possono fare con le classi .NET.
Per utilizzare le classi Python in C# è necessario utilizzare la classe ObjectOperations. Questa classe ti consente di operare su tipi e istanze python nella semantica della lingua stessa. per esempio. usa i metodi magici quando appropriato, promuove automaticamente interi per lunghi ecc. Puoi trovare ulteriori informazioni su ObjectOperations osservando il sorgente o usando reflector.
Ecco un esempio. Calculator.py contiene una semplice classe:
class Calculator(object):
def add(self, a, b):
return a + b
si può utilizzare dal pre .NET 4.0 C# codice come questo:
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)
Sarà necessario fare riferimento alle assemblee IronPython.dll, Microsoft. Scripting e Microsoft.Scripting.Core.
C# 4 ha reso tutto più semplice con il nuovo tipo dinamico .
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);
Se si utilizza Visual Studio 2010 o successiva con il supporto NuGet semplicemente eseguire questo per scaricare e fare riferimento alle librerie appropriate.
fonte
2009-02-23 22:14:43
non ho il rappresentante per modificare questo , ma nell'esempio Calculator.py, il primo "def" dovrebbe essere rientrato. Ottimo esempio, però! Molto utile. Ora che .Net 4.0 è fuori, sarebbe bello vedere un esempio aggiornato. –
Aggiunto un esempio .Net 4.0, utilizzando la stessa classe di esempio Calcolatrice. –
Grazie, ho aggiunto il rientro. –