Классы IronPython не .NET. Они являются экземплярами IronPython.Runtime.Types.PythonType, который является метаклассом Python. Это связано с тем, что классы Python являются динамическими и поддерживают добавление и удаление методов во время выполнения, что нельзя делать с классами .NET.
Чтобы использовать классы Python в C #, вам нужно будет использовать класс ObjectOperations. Этот класс позволяет вам оперировать типами и экземплярами Python в семантике самого языка. например при необходимости он использует магические методы, автоматически переводит целые числа в длинные и т. д. Вы можете узнать больше об ObjectOperations, посмотрев на источник или используя отражатель.
Вот пример. Calculator.py содержит простой класс:
class Calculator(object):
def add(self, a, b):
return a + b
Вы можете использовать его из своего пре .NET 4.0 C # кода следующим образом:
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