Классы IronPython: не .NET классы. Это экземпляры IronPython.Runtime.Types.PythonType, который является метаклассом Python. Это связано с тем, что классы Python являются динамическими и поддерживают добавление и удаление методов во время выполнения, что вы не можете делать с .NET-классами.
Чтобы использовать классы Python в C#, вам нужно будет использовать класс ObjectOperations. Этот класс позволяет работать с типами и экземплярами python в семантике самого языка. например он использует магические методы, когда это необходимо, автоматически продвигает целые числа в longs и т. д. Вы можете узнать больше об 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. Скрипты и 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
Я не имею rep редактировать это , но в примере Calculator.py первый «def» должен быть отступом. Отличный пример, хотя! Очень полезно. Теперь, когда .NET 4.0 отсутствует, было бы неплохо увидеть обновленный пример. –
Добавлен пример. Net 4.0, используя тот же класс образца калькулятора. –
Спасибо, я добавил отступ. –