Python for .NET
Python for .NET is a package, that gives Python programmers nearly seamless integration with .NET Common Language Runtime. With this package, you can script .NET applications or build entire applications in Python, using .NET services and components written in any language that targets the CLR (C#, VB.NET, F#, C++/CLI). Download package from here.
Create C# class
In Visual Studio, create a new C# class library project under the namespace CsLibrary. Create C# class Functions into this class project. The content of this class is presented below.
using System; namespace CsLibrary { // C# class public class Functions { public double Add(double a, double b) { return a + b; } public double Subtract(double a, double b) { return a - b; } public double Multiply(double a, double b) { return a * b; } public double Divide(double a, double b) { return a / b; } } }
Create wrapper for C# class
In order to access this class from Python, we need to have wrapper class, which inherits from DynamicObject. Add the following new class to existing solution. Effectively, this class is just object adapter, which delegates function calls to our previous C# class.
using System; using System.Dynamic; namespace CsLibrary { public class PyWrapper : DynamicObject { // wrapped C# class private Functions functions; // ctor public PyWrapper() { functions = new Functions(); } public double Add(double a, double b) { return functions.Add(a, b); } public double Subtract(double a, double b) { return functions.Subtract(a, b); } public double Multiply(double a, double b) { return functions.Multiply(a, b); } public double Divide(double a, double b) { return functions.Divide(a, b); } } }
Use wrapper class in Python
The following example program is using C# class wrapper (CsLibrary.dll) in Python.
import clr clr.AddReference(r'..\CsLibrary\bin\Release\CsLibrary.dll') from CsLibrary import PyWrapper wrapper = PyWrapper() x = 1.23 y = 2.34 print(wrapper.Add(x, y)) print(wrapper.Subtract(x, y)) print(wrapper.Multiply(x, y)) print(wrapper.Divide(x, y)) # 3.57 # -1.1099999999999999 # 2.8781999999999996 # 0.5256410256410257
That's it. The files can be downloaded from my GitHub page. Thanks for reading my blog.
-Mike
Is it possible to write a C# wrapper for python and if so how could one get started
ReplyDeleteHi Mike, were are you importing the PythonDotNet package? Your python script of do you embed it to your C# wrapper?
ReplyDeleteImportError: No module named CsLibrary
ReplyDeletefacing the above error. can you please help ?
Also you can try this: https://products.codeporting.com/wrapper/csharp-to-python
ReplyDelete