IronPythonクラスはではなく、 .NETクラスです。 PythonメタクラスであるIronPython.Runtime.Types.PythonTypeのインスタンスです。これは、Pythonクラスが動的であり、実行時にメソッドの追加や削除をサポートするためです。.NETクラスではできないことです。
C#でPythonクラスを使用するには、ObjectOperationsクラスを使用する必要があります。このクラスは、言語そのもののセマンティクスで、Pythonの型とインスタンスを操作することを可能にします。例えば必要に応じてマジックメソッドを使用し、整数をlongなどに自動的に昇格させます。ObjectOperationsの詳細については、ソースを参照するか、リフレクタを使用して調べることができます。
ここは例です。
class Calculator(object):
def add(self, a, b):
return a + b
あなたはこのようなあなたの前.NET 4.0 C#コードからそれを使用することができます:あなたはアセンブリIronPython.dll、マイクロソフトを参照する必要があります
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)
Calculator.pyは、単純なクラスが含まれています。スクリプティングと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);
NuGetサポートでVisual Studio 2010以降を使用している場合は、これを実行して適切なライブラリを参照してください。
Install-Package IronPython
を私は持っていませんこれを編集する担当者しかし、Calculator.pyサンプルでは、最初の "def"はインデントされるべきです。 素晴らしい例ですが、非常に役立ちます。今度は.Net 4.0がリリースされました。更新された例を見るのは良いことです。 –
同じCalculatorサンプルクラスを使用して.Net 4.0サンプルを追加しました。 –
ありがとう、私はインデントを追加しました。 –