Using Python Classes from .NET

From IronPython Cookbook

Revision as of 19:39, 5 August 2007 by MichaelFoord (Talk | contribs)
(diff) ← Older revision | Current revision (diff) | Newer revision → (diff)

This example uses the IronPython 1.X API.

using System;
using IronPython.Hosting;
using IronPython.Runtime.Types;
using IronPython.Runtime.Operations;

namespace TestPythonConsole
{
    class Program
    {
        static void Main()
        {
            string code = "import clr\r\nclr.AddReference('TestPythonConsole')\r\nfrom TestPythonConsole import Test\r\nclass X(Test):\r\n     def test(self):\r\n        return 'hello'\r\n\r\n";
            PythonEngine engine = new PythonEngine();
            EngineModule module = engine.CreateModule();
            engine.DefaultModule = module;
            engine.Execute(code);
            UserType ptype = module.Globals["X"] as UserType;
            Test obj = Ops.Call(ptype) as Test;
            Console.WriteLine(obj.test());
        }
    }

    public class Test
    {
        virtual public string test() 
        { 
            return "goodbye";
        }
    }

}

The Python code imports 'Test' (it has to add the right reference to the assembly first). It then subclasses 'Test' in a class called X.

The class we pull out of the Python engine globals is called and the result cast to Test.

Calling the method 'test' calls the subclass rather than the parent class.

Just to make it clearer, the Python code is:

import clr
clr.AddReference('TestPythonConsole')
from TestPythonConsole import Test

class X(Test):
     def test(self):
        return 'hello'


Back to Contents.

TOOLBOX
LANGUAGES